首先阐述 @Autowired 和 @Resource 的区别

@Resource 是JDK自带的注解 可以按名称注入也可以按类型注入,默认是按名称注入,没有显式指定名称时,在spring容器中匹配与需要注入的bean属性名相同的bean,如果还不同,@Resource会找到一个主类型匹配而不是一个特定的命名bean
@Autowired 由spring 提供 ,默认按类型注入,也可结合@Qualifier() 实现按名称注入

需要注意的是 以@Bean方式注入对象时,@Resource 按名称注入,是按声明的方法名注入的
@Autowired 结合 @Qualifier() 实现按名称注入时,是按@Qualifier() 定义的名称注入的

@Primary 当需要注入多个同类型的bean时,选择其中一个为优先注入对象,并且同类型对象只能选择一个,超过一个时则启动报错,提示信息就是你选择了多个bean为优先注入对象

@Qualifier() 你可以为每个注入的bean起个不同的名字,结合@Autowired 实现按名称注入

示例:
@Autowired 结合 @Qualifier() 实现按名称注入
首先定义一个需要注入的对象

import lombok.Builder;
import lombok.Data; @Data
@Builder
public class UserInfo {
private String username;
private String password;
}

然后定义一个config类,注入两个UserInfo,利用 @Qualifier() 声明两个不同的bean

import com.example.demo.entities.UserInfo;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class UserInfoConfig { @Bean
@Qualifier("zhangsan")
public UserInfo userInfo() {
UserInfo userInfo = UserInfo.builder().username("zhangsan").password("123456").build();
return userInfo;
} @Bean
@Qualifier("lisi")
public UserInfo userInfo1() {
UserInfo userInfo = UserInfo.builder().username("lisi").password("123456").build();
return userInfo;
} }

controller 层注入 zhangsan这个对象

@RequestMapping("/user")
@RestController
public class UserController { @Autowired
@Qualifier("zhangsan")
private UserInfo userInfo; @GetMapping("/getUserInfo")
public UserInfo getUserInfo() {
return userInfo;
}
}

返回结果为

{
"username": "zhangsan",
"password": "123456"
}

我们再注入lisi这个对象

@RequestMapping("/user")
@RestController
public class UserController { @Autowired
@Qualifier("lisi")
private UserInfo userInfo; @GetMapping("/getUserInfo")
public UserInfo getUserInfo() {
return userInfo;
}
}

返回结果

{
"username": "lisi",
"password": "123456"
}

接下来,我们测一下@Primary 看是否实现优先注入,修改config类

@Configuration
public class UserInfoConfig { @Bean
@Primary
public UserInfo userInfo() {
UserInfo userInfo = UserInfo.builder().username("zhangsan").password("123456").build();
return userInfo;
} @Bean
public UserInfo userInfo1() {
UserInfo userInfo = UserInfo.builder().username("lisi").password("123456").build();
return userInfo;
}
}

controller 层 直接用 @Autowired 注入

@RequestMapping("/user")
@RestController
public class UserController { @Autowired
private UserInfo userInfo; @GetMapping("/getUserInfo")
public UserInfo getUserInfo() {
return userInfo;
}
}

返回结果,没毛病

{
"username": "zhangsan",
"password": "123456"
}

我们再验证 lisi这个对象

@Configuration
public class UserInfoConfig { @Bean
public UserInfo userInfo() {
UserInfo userInfo = UserInfo.builder().username("zhangsan").password("123456").build();
return userInfo;
} @Bean
@Primary
public UserInfo userInfo1() {
UserInfo userInfo = UserInfo.builder().username("lisi").password("123456").build();
return userInfo;
}
}

返回结果,没得毛病

{
"username": "lisi",
"password": "123456"
}

接下来我们再测,@Resource 的按名称注入,看是否是按定义的方法名注入的

config类

@Configuration
public class UserInfoConfig { @Bean
public UserInfo userInfo() {
UserInfo userInfo = UserInfo.builder().username("zhangsan").password("123456").build();
return userInfo;
} @Bean
public UserInfo userInfo1() {
UserInfo userInfo = UserInfo.builder().username("lisi").password("123456").build();
return userInfo;
}
}

controller 层

@RequestMapping("/user")
@RestController
public class UserController { @Resource(name = "userInfo")
private UserInfo userInfo; @GetMapping("/getUserInfo")
public UserInfo getUserInfo() {
return userInfo;
}
}

返回结果

{
"username": "zhangsan",
"password": "123456"
}

修改@Resource(name = “userInfo1”) 注入第二个方法名
返回结果,没毛病哈

{
"username": "lisi",
"password": "123456"
}

@Primary ,@Qualifier ,@Autowired ,@Resource作用与区别的更多相关文章

  1. Wiring in Spring: @Autowired, @Resource and @Inject 区别

    refer:https://www.baeldung.com/spring-annotations-resource-inject-autowire 主要是查找顺序不一致: @Resource Mat ...

  2. @Autowired @Resource @Qualifier的区别

    参考博文: http://www.cnblogs.com/happyyang/articles/3553687.html http://blog.csdn.net/revent/article/det ...

  3. @Autowired & @Resource 区别 & 解读@Bean

    一样     Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上.也可以写在setter方法上 不一样 1.来源不一样 @Autowired 由Spr ...

  4. Spring注解之@Autowired、@Qualifier、@Resource、@Value

    前言 @Autowired.@Qualifier.@Resource.@Value四个注解都是用于注入数据的,他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的!本篇中特别要讲解 ...

  5. 注解,@Qualifier+@Autowired 和 @Resource

    摘要: 项目中,对于AOP的使用,就是通过用注解来注入的. 更改之前的注解,是使用:@Qualifier+@Autowired   但是,通过这样注解,在项目启动阶段,需要自动扫描的过程是非常缓慢的, ...

  6. Spring中@Autowired注解、@Resource注解的区别 (zz)

    Spring中@Autowired注解.@Resource注解的区别 Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@ ...

  7. Spring 注释标签@Resource @Autowired 和@Inject的区别

    一些spring的开发人员在使用这三个标签进行注入的时候感到困惑.我来尝试解释一下这三个注解的主要区别.事实上,这三者非常相似,只存在一些微小的差别.在稍后的文章中会进行解释. @Resource-在 ...

  8. @Autowired注解与@Resource注解的区别(详细)

    相信对现在Java码农来说,@Autowired跟@Resource并不陌生,二者都可以自动注入,但是两者的区别很多时候并没有被注意到. 一.注解的出处 @Autowired是Spring提供的注解, ...

  9. Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类

    问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...

  10. IOC @Autowired/@Resource/@Qulified的用法实例

    首先要知道另一个东西,default-autowire,它是在xml文件中进行配置的,可以设置为byName.byType.constructor和autodetect:比如byName,不用显式的在 ...

随机推荐

  1. 【ue源码】定制-蓝图部分

    今天在更新UE的伤害系统的时候出现了一个问题: 多个地方频繁调用一个函数,而这个函数肯定做优化,具体就是,把对应数据放入到队列,另外一个地方慢慢消费这个队列, 那么问题出现了,我使用的UE只有Sing ...

  2. 【超实用攻略】SpringBoot + validator 轻松实现全注解式的参数校验

    一.故事背景 关于参数合法性验证的重要性就不多说了,即使前端对参数做了基本验证,后端依然也需要进行验证,以防不合规的数据直接进入服务器,如果不对其进行拦截,严重的甚至会造成系统直接崩溃! 本文结合自己 ...

  3. 使用nvm管理node

    安装包在阿里云盘 安装时,记录安装位置 安装后,在安装目录的setting添加镜像地址 node_mirror:npm.taobao.org/mirrors/node/ npm_mirror:npm. ...

  4. docker无法安装而需要的换源需求

    docker无法安装镜像而需要的换源需求: 报错信息 (超时连接) 第一步: 登录阿里云:https://www.aliyun.com/ 第二步: 进入阿里云镜像加速: 点击"控制台&quo ...

  5. 【Dubbo】构建SpringBoot整合Dubbo的Demo

    参考乐字节的Dubbo教程 https://www.bilibili.com/video/BV19L4y1n7YE Zookeeper单机部署 (Windows) 因为项目需要,这里我自己学习就采用Z ...

  6. 强化学习中的“sample efficiency”应该如何翻译 —— “样本效率”还是“采样效率”

    问题: 强化学习中的"sample efficiency"应该如何翻译 -- "样本效率"还是"采样效率" 答案: 具体看上下文内容.如果是 ...

  7. Jax框架的jit编译是否可以使用循环结构,如果使用循环结构需要注意什么(续)

    前文: Jax框架的jit编译是否可以使用循环结构,如果使用循环结构需要注意什么 从前文我们知道,jax的jit中尽可能的不要放入循环结构,因为在jit编译时会将循环结构暂开,因而会消耗掉大量的时间进 ...

  8. 电视家APP,从此以后电视盒子只是盒子,再与电视毫无关系

    广电总局封掉了电视家APP,于是我决定把我的"当贝盒子"挂咸鱼了,从此以后电视盒子就只是个盒子. PS: 广电的一刀切简直是绝了,绝绝子.

  9. 经典视频分享:Machine Learning: A New ICE (Identification, Control, Estimation) Age ? —— 自动控制和人工智能的结合前景

    机器学习作为近几年兴起的学科,虽然他诞生的时间已经而久远了,但是真正走进人们视野也就是这几年的事情. 机器学习领域本身只有强化学习这个分支和控制类是天然关联的,因此近几年国内的知名高校的强化学习研究者 ...

  10. 证明: 设n阶方阵A相似于对角阵Λ, λ是A的k重特征值, 则r(λE-A)=n-k.

    命题: 设n阶方阵A相似于对角阵Λ, λ是A的k重特征值, 则r(λE-A)=n-k.证明: 由定理3.9: A~Λ <=> A有n个线性无关的特征向量, 知k重特征值λ存在k个线性无关的 ...