Spring对于Bean的依赖注入:@Autowired @Inject @Resource

Spring对于Bean的依赖注入,支持多种注解方式:
@Resource     javax.annotationJSR250 (Common Annotations for Java)
@Inject           javax.injectJSR330 (Dependency Injection for Java)
@Autowired   org.springframework.bean.factory

@Autowired是Spring提供的注解,其他几个都是JDK本身内建的注解,Spring对这些注解也进行了支持。

加载bean的原理:
@Autowired和@Inject这两个注解行为完全相同,都是通过 AutowiredAnnotationBeanPostProcessor 来实现依赖注入,即在注入Spring bean的时候‘@Autowired’和‘@Inject’可以互换。其加载bean的执行逻辑顺序如下:
    Matches by Type。
    Restricts by Qualifiers
    Matches by Name

@Resource是用CommonAnnotationBeanPostProcessor类实现的依赖注入,其加载bean的执行逻辑顺序如下:
    Matches by Name
    Matches by Type
    Restricts by Qualifiers (ignored if match is found by name)

@Autowired有个required属性,可以配置为false,这种情况下如果没有找到对应的bean是不会抛异常的。@Inject和@Resource没有提供对应的配置,所以必须找到否则会抛异常。

Spring注解风格最佳实践:

  1. 显式命名component:@Component(“beanName”)。
  2. 使用‘@Resource’的时候带上name属性:@Resource(name=”beanName”)。
  3. 避免使用‘@Qualifier’,除非你想创建一个bean列表。例如,你可能想使用特定‘@Qualifier’来标记一些规则,然后将这些规则类注入到一个列表中,从而使用这个规则列表来处理数据。
  4. 扫描component的时候使用更具体的包:context:component-scan base-package=“com.sourceallies.person”。虽然这会导致更多的component-scan配置,但是能够在当前 Spring context中减少不必要的component。

遵循这些规则的话,应该可以增加Spring注解配置的可读性和稳定性:)

转载于:https://my.oschina.net/u/2410074/blog/834603

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值