Spring 注解 | @Autowired @Resource @Qualifier等依赖注入匹配规则

前言:

    该篇将Spring中依赖注入常用注解,涉及:@Autowired、@Primary 、 @Qualifier 、@Resource。本文将详细探讨这些注解的匹配规则和用法。

目录

一、@Autowired

1.来源:

2.属性介绍:

3.匹配规则优先级

二、@Resource

1.来源

2. 匹配规则优先级:

三、@Autowired @Resource 的区别

1.来源不同:

2.匹配规则优先级不同

3.机动性不同


一、@Autowired

1.来源:

Spring框架

2.属性介绍:

     属性required 默认为true。如果容器中找不到符合类型的 Bean,Spring 将抛出异常,除非手动将@Autowired 注解的 required 属性设置为 false。

@Autowired(required = false)
private MyService myService;

3.匹配规则优先级

按类型匹配

      Spring 容器会根据 Bean 的类型来进行匹配。

有多个符合类型的 Bean,根据以下优先级选择: 

1.根据 @Primary 注解标记的 Bean。

@Component
public class BeanConfig {

 @Primary //指定该bean为默认bean的实现 
 @Bean
 public User user1(){
 User user = new User();
 user.setName("zhangsan");
 return user;
 }

 @Bean
 public User user2() {
 User user = new User();
 user.setName("lisi");
 return user;
 }

2.根据@Qualifier 注解进行更精确的选择

@Controller
public class UserController {
 @Qualifier("user2") //指定bean名称 
 @Autowired
 private User user;
}

二、@Resource

1.来源

   @Resource是 JSR-250 标准提供的注解,JSR-250(Java Specification Request 250)这个规范定义了一组用于 Java EE(现为 Jakarta EE)应用程序的标准注解。Spring 也支持 JSR-250 注解。

2. 匹配规则优先级:

按名称匹配

@Resource默认会按 Bean 的名称进行匹配

如果名称匹配不上,

Spring 会尝试按类型匹配。

可指定名称:可以通过 name 属性指定具体的 Bean 名称。

@Resource(name = "myService")
private MyService myService; // Spring 将注入名称为 myService 的 Bean

三、@Autowired @Resource 的区别

1.来源不同:

@Autowired是spring框架提供的注解,⽽@Resource是Jakarta EE提供的注解

2.匹配规则优先级不同

@Autowired默认是按照类型注⼊,@Resource是按照名称注⼊.

3.机动性不同

       相对@Autowired来说, @Resource⽀持更多的参数设置,例如name设置,根据名称获取Bean。@Autowired则需要搭配@Primary 或 @Qualifier(设置名称)解决多对象问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值