@Autowired和@Resouce的区别?
- @Autowired 是Spring提供的,@Resource 是JDK提供的。
- @Autowired默认按
type
装配,@Resource默认是按name
装配。 - @Autowired只包含一个参数:
required
,如果允许为null值,可以设置为false。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。 - @Autowired如果要使用
byName
,需要使用@Qualifier
一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。 - @Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:
类、成员变量和方法
上。
装配机制不同:
@Autowired:
- 默认按照类型寻找唯一bean,找不到,则抛出异常
- 找到多个,看是否配合了@Qualifier,有则根据参数名,寻找唯一Bean,找不到则抛出异常
- 没有使用@Qualifier,则根据属性名寻找唯一Bean,找不到抛出异常
@Resouce:
- 若指定type和name,则在容器中寻找唯一Bean,找不到抛出异常
- 若指定了type,则在容器中寻找唯一Bean,找不到或找到多个抛出异常
- 若指定了name,则根据name寻找唯一Bean,找不到抛出异常
- 如果既没指定name,也没指定type,则自动按照byName方式进行装配。找不到,则回退为按照类型进行匹配,如果匹配则自动装配。