@Autowired和@Resource

Spring对于Bean的依赖注入,支持多种注解方式:@Resourcejavax.annotationJSR250 
(Common Annotations for Java)
@Injectjavax.injectJSR330 (Dependency Injection for Java)
@Autowiredorg.springframework.bean.factorySpring直观上看起来,
@Autowired是Spring提供的注解,
其他几个都是JDK本身内建的注解,Spring对这些注解也进行了支持。
但是使用起来这三者到底有什么区别呢?笔者经过方法的测试,
发现一些有意思的特性。区别总结如下:一、@Autowired有个required属性,可以配置为false,
这种情况下如果没有找到对应的bean是不会抛异常的。@Inject和@Resource没有提供对应的配置,
所以必须找到否则会抛异常。二、 @Autowired和@Inject基本是一样的,
因为两者都是使用AutowiredAnnotationBeanPostProcessor来处理依赖注入。
但是@Resource是个例外,
它使用的是CommonAnnotationBeanPostProcessor来处理依赖注入。
当然,两者都是BeanPostProcessor。@Autowired和@Inject-
默认 autowired by type- 可以 通过@Qualifier
显式指定 autowired by qualifier name。-
如果 autowired by type 失败(找不到或者找到多个实现),
则退化为autowired by field name@Resource-
默认 autowired by field name-
如果 autowired by field name失败,
会退化为 autowired by type- 可以 通过@Qualifier
显式指定 autowired by qualifier name-
如果 autowired by qualifier name失败,
会退化为 autowired by field name。
但是这时候如果 autowired by field name失败,就不会再退化为autowired by type了。
原文地址:https://www.cnblogs.com/erma0-007/p/8647308.html