当前位置: 首页 > news >正文

什么是网站程序/搜索引擎seo关键词优化

什么是网站程序,搜索引擎seo关键词优化,wordpress 文档阅读器,坪山附近公司做网站建设多少钱前言: 我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Co…

前言:        

        我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注@Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Controller层需要使用到Service层的服务组件时,就通过@Autowired@Resource等注解标注接口,Spring会自动为我们注入接口的实现类。

       OrderController:

@RestController
@RequestMapping("/order")
public class OrderController{@AutowiredIOrderService orderService;@GetMapping("{id}")public Order getOrder(@PathVariable("id") Integer id){return orderService.getOrderById(id);}}

        OrderServiceImpl:

@Service
public class OrderServiceImpl implements IOrderServiceImpl{@AutowiredOrderDao orderDao;@Overridepublic Order getOrderById(Integer id){if(id != null)orderDao.getById(id);}}

        在IOrderService接口只有一个实现类:OrderServiceImpl时,这么写当然没有问题。如果我们编写了多个IOrderService接口的实现类,在不同场景需要使用不同实现类,这么写还能行吗?肯定不能!

        原因:@Autowired注解注入的方式是by type按类型注入,一个接口如果存在多个实现类,Spring将不知道应该注入哪个实现类,在启动阶段就会报错。

        @Autowired:

​
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;
}​

        其中还有一个required属性,默认为true,表示强制要求Bean实例的注入,如果IOC容器不存在对应类型的Bean,Spring启动时就会报错。

解决方案:

        (1)在使用@Service注解配置实现类时,声明bean的名称,并使用@Qualifier注解注入对应的实现类。

        OrderServiceImpl1:

//指定名称
@Service("orderServiceImpl1")
public class OrderServiceImpl implements OrderService {@Overridepublic String sayHello() {return "实现类1 say Hello";}}

        OrderServiceImpl2:

//指定名称
@Service("orderServiceImpl2")
public class OrderServiceImpl2 implements OrderService {@Overridepublic String sayHello() {return "实现类2 say Hello";}
}

        OrderController:

@RestController
@RequestMapping("/order")
public class OrderController {@Autowired@Qualifier("orderServiceImpl1")//使用指定名称的bean示例作为实现类OrderService orderService;@GetMapping("/test")public String test(){return orderService.sayHello();}}

        启动Spring,并使用Postman测试接口,测试结果:

       修改Qualifier注解为:@Qualifier("orderServiceImpl2"),重启Spring,再次测试接口,测试结果:

        可以看到Spring容器为OrderService接口注入了不同的实现类。

        (2)使用@Resource注解。

        OrderController:

@RestController
@RequestMapping("/order")
public class OrderController {@Resource(name = "orderServiceImpl2") //指定使用哪一个bean作为实现类OrderService orderService;@GetMapping("/test")public String test(){return orderService.sayHello();}}

        测试结果:

        原理:@Resource注解默认的注入方式是by name按名称注入,如果你只是单纯使用@Resource注解,而不指定其属性,那么它默认会匹配字段名。如下

@RestController
@RequestMapping("/order")
public class OrderController {//默认匹配bean名称为orderService的bean示例@ResourceOrderService orderService;/*默认匹配bean名称为service的bean示例@ResourceOrderService service;*/@GetMapping("/test")public String test(){return orderService.sayHello();}}

        补充:如果by name注入失败,那么它会通过by type继续尝试注入。当然,如果此时存在多个实现类,Spring会在启动阶段报错。

        报错:No qualifying bean of type 'com.hammajang.springbootdemo.service.OrderService' available: expected single matching bean but found 2: orderServiceImpl,orderServiceImpl2

        这里意指通过by name没有匹配到bean实例,尝试通过by type时匹配到了两个bean实例,Spring不知道注入哪个bean实例。

        以上就是本文的全部内容,如果你有所收获,不妨点个赞!

相关文章:

【Spring】依赖注入之属性注入详解

前言: 我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Co…...

6-tornado配置文件的使用(命令行解析、文件设置)

tornado.options options 可以让服务运行前提前设置参数,而常见的2种设置参数方式为:1. 命令行设置 2. 文件设置命令行解析 使用tornado.options.define前定义,通常在模块的顶层。 然后,可以将这些选项作为以下属性的属性进行访…...

k8s ingress service endpoints 解决微信服务器验证问题(内网穿透)

最近公司要搞微信公众号开发,想用自己公司内网的电脑调试,但涉及到微信服务器地址(URL)验证的问题(内网穿透),查了网上一堆文章有推荐ngrok的,但被微信墙了;有推荐sunny-ngrok的,免费…...

postgresql-effective_cache_size参数详解

在 PostgreSQL 中,effective_cache_size 是一个配置参数,用于告诉查询规划器关于系统中可用缓存的估计信息。这个参数并不表示实际的内存量,而是用于告诉 PostgreSQL 查询规划器系统中可用的磁盘缓存和操作系统级别的文件系统缓存的大小。它用…...

CUDA锁页内存的使用

1.定义指针变量 float *host_Weights; // 锁页内存 float *dev_Weights; // 设备端内存2.分配内存 cudaHostAlloc((void**)&host_Weights, numInputs * sizeof(float), cudaHostAllocDefault); // 用锁页内存,可以有效加快数据传递速度 cudaMalloc((vo…...

python常见代码用法

1.result [[]] * n 和 result [[] for _ in range(n)] 辨析 n 3 result [[]] * nprint(result) # 输出:[[], # [], # []]print(result[0] is result[1] is result[2]) # 输出:True* 运算符进行复制,这些空列表实际…...

MTU TCP-MSS(转载)

MTU MTU 最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。 是包或帧的最大长度,一般以字节记。如果MTU过大,在碰到路由器时…...

【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 SNOOPer 介绍SNOOPer 主要功能:SNOOPer 使用场景SNOOPer.ERRORSTOPSNOOPer.ModeSNOOPer.PCSNOOPer.RateSNOOPer.SELectSNOOPer.SIZESNOOPer.TDelaySNOOPer.TOutSNOOPer.TValueSNOOPer PC 采样Trace32 SNOOPer 介绍 在 Laut…...

MySQL笔记-第11章_数据处理之增删改

视频链接:【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】 文章目录 第11章_数据处理之增删改1. 插入数据1.1 实际问题1.2 方式1:VALUES的方式添加1.3 方式2:将查询结果插入到表中 2. 更…...

ANSYS常见error解答(转)

根据SimC结构工作室这段时间的答疑总结,给出了部分关于ANSYS常见error的解释说明,希望对大家有所帮助。 1.KBC is not a recognized BEGIN command, abbreviation, or macro.This command will be ignored. 答:ANSYS 对命令的使用有严格的规…...

【Let‘s Encrypt SSL】使用 acme.sh 给 Nginx 安装 Let’s Encrypt 提供的免费 SSL 证书

安装acme.sh 安装 acme.sh 并设置邮箱用来接受重要通知,如证书快过期未更新通知 curl https://get.acme.sh | sh -s emailmyexample.com执行命令后几秒就安装好了,如果半天没有反应请 CtrlC 后重新执行命令。acme.sh 安装在 ~/.acme.sh 目录下&#xf…...

XML学习及应用

介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备…...

Docker部署Nacos集群并用nginx反向代理负载均衡

首先找到Nacos官网给的Github仓库,里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理,负载均衡…...

C++STL的stack和queue(超详解)

文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列150. 逆波兰表达式求值 stack的模拟实现queue的模拟实现dequedeque底层设计 前言 栈和队列这一块其实有数据结构的基础,学起来非常简单。 stack 栈的成员函数就这么写,除了emplace其他都已经非…...

【C语言实现windows环境下Socket编程TCP/IP协议】

C语言实现windows环境下Socket编程TCP/IP协议 主要是记录解决一些在我本地编译运行时出现的问题connect :No error关于头文件关于stray /xxx和socket:No error问题千万记得是服务器先启动哦,客户端后启动下面附上我改好的代码 主要是记录解决…...

CGAL的3D简单网格数据结构

由具有多个曲面面片的多面体曲面生成的多域四面体网格。将显示完整的三角剖分,包括属于或不属于网格复合体、曲面面片和特征边的单元。 1、网格复合体、 此软件包致力于三维单纯形网格数据结构的表示。 一个3D单纯形复杂体由点、线段、三角形、四面体及其相应的组合…...

正则表达式(9):扩展正则表达式

正则表达式(9):扩展正则表达式 小结 本博文转载自 前文中一直在说,在Linux中,正则表达式可以分为”基本正则表达式”和”扩展正则表达式”。 我们已经认识了”基本正则表达式”,现在,我们来认…...

静态SOCKS5:了解基本概念和协议

SOCKS5是一种网络协议,是SOCKS协议的第五个版本,它提供了一种安全的、加密的网络连接,可以帮助用户在互联网上保护自己的隐私和安全。静态SOCKS5是指使用静态IP地址和端口的SOCKS5代理服务器,这种代理服务器可以提供更稳定、更快速…...

用23种设计模式打造一个cocos creator的游戏框架----(十二)状态模式

1、模式标准 模式名称:状态模式 模式分类:行为型 模式意图:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 结构图: 适用于: 1、一个对象的行为决定于它的状态,并且它必须…...

js 转换为数组并返回(Array.of())

Array提供了方法直接将一组值转换为数组并返回 Array.of()方法 Array.of(1,2,3) 结果...

git上传文件夹后打不开,有@.....

这种情况是你上传的这个文件夹也是个git仓库,需要删除.git文件。 如果你删除.git文件后,上传git还是不行,文件夹还是…,那就需要清理以下整个项目的缓存: git rm -r --cached ....

31、应急响应——Windows

文章目录 一、账户排查1.1 登录服务器的途径1.2 弱口令1.3 可疑账号 二、网络排查三、进程排查四、注册表排查五、内存分析 一、账户排查 1.1 登录服务器的途径 3389smb 445httpftp数据库中间件 1.2 弱口令 弱口令途径:3389、smb 445、http、ftp、数据库、中间件…...

QT linux下使用Qt Creator调试附加进程,加快调试

文章目录 一、调试附加进程二、配置流程(1)开放linux内核配置项(2)命令行直接启动程序(3)调试附加到进程 一、调试附加进程 使用附加进程调试要比直接调试速度要快,但是不足之处是,…...

IDEA Maven项目如何引用本地jar包,并打包发布

jar包位于当前路径下的lib目录中 引入所需要的配置 查看当前jar包的相关信息 包的引入,需要使用到当前包的artifactId, groupId, version 需要到包的/META-INF/maven/ 下面的 pom.xml 文件里面找 在Maven构建项目时,生成的依赖包中的/META-INF/maven目录存放了一些…...

Unity中Batching优化的GPU实例化(3)

文章目录 前言一、UNITY_SETUP_INSTANCE_ID(v);二、在UnityInstancing.cginc文件中,看一下Unity这句话做了什么1、使用了该 .cginc 后,会自动预定义该函数2、需要满足GPU实例化条件,才会执行对应语句3、满足GPU实例化后,主要执行的…...

Web应用JSON数据保护(密码算法、密钥、数字签名和数据加密)

1.JSON(JavaScript Object Notation) JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON通过简单的key-value键值对来描述数据,可以被广泛用于网络通信、数据存储等各种应用场景&#xff0…...

【软件安装】VMware安装Centos7虚拟机并且设置静态IP,实现Windows和Centos7网络互相访问

这篇文章,主要介绍VMware安装Centos7虚拟机并且设置静态IP,实现Windows和Centos7网络互相访问。 目录 一、VMware安装Centos7 1.1、下载Centos7镜像 1.2、安装Centos7系统 二、设置静态IP地址 2.1、查看虚拟机网络IP 2.2、禁用NetworkManager服务 …...

203. 移除链表元素

203. 移除链表元素 https://leetcode.cn/problems/remove-linked-list-elements/description/ 方法一:迭代 迭代遍历链表 注意:这里的head是指向第一个节点的(首元节点),并没有一个虚拟的头节点,所以这…...

最新鸿蒙HarmonyOS4.0开发登陆的界面1

下载deveco-studio 说明一下,本人只是学习中,现在只是拿着vue及uniapp的经验在一点一点的折腾,不过现在看来,鸿蒙入门并不是很难。也许是自己没有深入下去。 https://developer.harmonyos.com/cn/develop/deveco-studio#download…...

【模型训练】目标跟踪

【模型训练】目标跟踪...