@Autowired、@Resource 和 @Inject注解

@Autowired 自动装配

  • 1.默认优先按照类型去容器中找对应的组件:applicationContext.getBean(xxx.class),找到就赋值;
  • 2.如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找。
@Bean("apple02")                     //---------  Ⅰ
public Apple apple(){
    return new Apple();
}

@Service //默认式类名首字母小写        //---------  Ⅱ
public class apple01{}


@Autowired
private Apple apple01;                // 此时默认装配的是 Ⅰ

@Autowired
private Apple apple02;              // 此时装配的就是ID为apple02的bean,即 Ⅱ

// 或者使用@Qualifier注解显示声明要装配的bean的ID
@Autowired
@Qualifier("apple02")
private Apple abc;                   // 此时变量名就无所谓了
  • 3.使用 @Qualifier 指定需要装配的组件的ID,而不是使用属性名。
  • 4.自动装配一定要将属性赋值好,没有就会报错,找不到该bean。
  • 5.如果想找不到就算了,就给 @Autowired 注解中的required属性设置为false,默认为true。
@Autowired(required = true)
  • 6.Spring还提供了一个强大的注解 @Primary,首选装配的bean用此注解进行注解,该注解可以让Spring进行自动装配的时候,默认使用首选的bean,也可以继续结合 @Qualifier 指定需要装配的bean的名字。

@Resource(JSR250规范)

可以和 @Autowired 一样实现自动装配功能,默认是按照组件名称进行装配的。但是它不支持 @Primary 功能,也不支持@Autowired 中的 required 属性值配置。

@Inject(JSR330规范)

需要导入以下依赖,才可使用:

<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

也支持自动装配,和 @Autowired 功能一致,支持配合使用 @Primary,但也不能配置任何属性值。

总结

  • @Autowired:Spring 专属定义的。
  • @Resource、@Inject都是属于Java规范。

PS:在 Spring 中,是 AutowiredAnnotationBeanPostProcesser 进行解析这三种注解并完成自动装配功能的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值