@Autowired注解注入细节及与@Resource的区别
1、@Autowired的作用
@AutoWired 可以作用于:构造器、方法、参数、属性
上,在spring加载的时候会将带有@autowired注解的内容进行识别,并自动装配
2、@autowired 与 @Resource的区别
使用了一段时间的 @autowired 自动装载之后,偶尔会看到在一些地方使用了 @Resource 注解进行自动装载,那么 @autowired 与 @Resource 有什么区别,我们在使用的时候应该如何进行选择呢?
相同点:
我们已知道,两者都能完成自动装载的任务,都可以写在属性(字段)上,也可以写在 setter 上
不同点:
- 来源不一样
@Autowired 由Spring提供
@Resource 由J2EE 提供 - 注入方式不一样
@Autowired 默认 ByType (按类型注入),若需按名字,则配合使用@Qualifier,默认依赖对象必须存在,若允许不存在,需指定 required = false
@Resource 默认 ByName (按名字注入), 若找不到对应的bean,会继续按类型去找, (但一旦指定了name,那么只会按名字去找 bean) - 限制不一样
@Autowired 使用属性 (字段) 注入的话,有的编译器要警告,建议使用构造方法注入;
@Resource 则不会,然而,@Resource 的限制很多,不能使用构造方法注入,如果使用属性(字段)注入的话,则容易出现 nullpointerException. 如果使用setter方法注入,则属性不能设置为 final
3、@Autowired注解注入方式选择
由此可知,@Autowired相较@Resource 更加灵活,但是当不需要@Autowired的灵活性的时候,推荐使用@Resource,这样可以减少与Spirng 的耦合,使得代码更加优雅