Spring中@Autowired和@Resource的区别

@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值