注解Autowired与Resource的区别
注解来源
@Autowired是Spring框架所定义的注解,而@Resource是JSR-250规范定义的注解,你可以在spring中同时使用这两个注解
@Autowired
由Spring提供,只按照byType注入
只有一个属性required,默认值为true,表示注入时对应的bean必须存在,找不到则抛出异常,为false时,找不到就跳过并赋值为null
按照类型进行查找,如果对应类型的bean不唯一,将抛出异常
可通过组合注解解决
1
2
3
private UserMapper userMapper;
@Resource
@Resource有两个常用属性:name、type,因此存在四种注入情况
- 都不指定,即默认情况下:先通过name作为key去查找,如果找不到再通过type去查找,如果找不到或结果不唯一则抛出异常
- 指定name:通过name找到唯一的bean,找不到将抛出异常
- 指定type:通过type找到唯一的bean,如果不唯一或找不到则抛出异常
- 指定name和type:通过name找到唯一的bean,找不到抛出异常;如果type和字段类型不一致,也会抛出异常
相同点
- Spring都支持
- 都可以作用在字段和setter方法上
不同点
- Resource是JDK提供的,而Autowired是Spring提供的
- Resource不允许找不到bean的情况,而Autowired可以允许
@Autowired(required = false)
- 指定name的方式不一样
@Resource(name = "baseDao")
@Autowired()@Qualifier("baseDao")
- Resource默认通过name查找,而Autowired默认通过type查找
推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring的耦合。