spring 框架的 @Autowired 和 @Resource 两种注解的区别

最开始做项目时,依赖注入用到的注解都是 J2EE 的 @Resource,那时还根本不了解 spring 有 @Autowired。心塞。

前两天想到估计有很多刚开始学习 java 的童鞋可能对这两个注解并没有注意区分,那我就在这总结一下吧。当然很多都是 copy 自网络。

相同点:

  1. 都是用来装配 Bean,都可以写在字段上,或者写在 setter 方法上。

不同点:

  @Autowired

  1. 默认按类型装配。

  2. 默认情况下必须要求对象存在,如果允许 Null 值,可是设置 requried 属性为 false 。如下:

@Autowired(required = false) 

  3. 如果想改为按名称匹配,需要结合 @Qualifier 注解使用。如下:

@Autowired
@Qualifier("baseDao")
private BaseDao baseDao;
  
  @Resource

  1. 默认按照名称装配,且默认按字段名查找。

  2. 如指定 name 属性,则按照指定的 name 值查找。如下:

@Resource("dao")
private BaseDao baseDao;

  3. 在不指定 name 值的前提下,按名称搜不到匹配的 bean 时,会自动改为按类型匹配。

原文地址:https://www.cnblogs.com/libra0920/p/5397343.html