@Autowired和@Resource的区别
1. @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
@Autowired
private UserDao userDao;//用于字段上
@Autowired
public void setUserDao(UserDao userDao) {//用于属性的setter方法上
this.userDao= userDao;
@Resource(name=“userDao”)
private UserDao userDao;//用于字段上
@Resource(name=“userDao”)
public void setUserDao(UserDao userDao) {//用于属性的setter方法上
this.userDao= userDao;
}
2.@Autowired默认按byType注入,byName需要与@Qualifier("对象名")连用
@Resource同时支持byType和byName注入,默认按byName注入,如果默认情况下找不到就按类型找(name属性解析为bean的名字,而type属性则解析为bean的类型)
//按类型匹配:按默认的userDao变量名去容器中找同名的引用变量,如果有就注入
@Autowired
private UserDao userDao;
//精确按照手动指定的名称注入,如果名称不匹配就报异常,不会用类型注入
@Autowired@Qualifier("userDao")//精确按照名称注入,
private UserDao userDao;
//name="userDao" 拿手动指定的name的值是userDao作为对象的名字去spring容器中寻找同名的引用变量,有就注入
@Resource(name="userDao")
private UserDao userDao;
//@Resource中没有写name属性,拿默认的属性/变量的名字userDao 去spring容器中寻找,有就注入
@Resource
private UserDao userDao;
//有name就直接匹配name的值,如果匹配不上拿属性名称寻找,如果属性名称找不到按类型匹配
@Resource
private UserDao userDao111;
3.@Autowired是spring提供的注释,@Resource是JAVA2EE提供的
推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅
参考
https://blog.csdn.net/magi1201/article/details/82590106
https://blog.csdn.net/weixin_40423597/article/details/80643990