spring注解中的@Resource和@AutoWired两种注解的区别

Spring  中@AutoWire和@Resource两种注解的区别

下面是基于java,spring的代码,(jdk8,spring5.0)

下面实验代码在基于spring2.5的时候会出现和下面结果相反的结论,所以请参考的朋友看清楚我使用的是jdk8,spring5.0,以免出现不必要的错误

 

@AutoWire和@Resource两种注解都是做bean注入时使用的,但@Resource并不是spring的注解,它的包是javax.annotation.Resource(只要使用jdk,就可以了,里面包含着这个注解)
而需要导入,但是spring支持该注解.

这里先解释下byType,和byName下面提到的两个常提到的属性

byType:  即bean的class类型

byName:即bean的id属性的值

 


@AutoWire是按照  byType类注入的,需要导入spring的

org.springframework.beans.factory.annotation.Autowired包(导入bean包就没问题),

 

 

@Autowired默认按照byType的方式来匹配bean
第一种,这是按照属性注入的    (用于字段上)
public class DeptInfoservice {

    @Autowired
    private DeptInfoDao dao;

    public void dept() {
        dao.deptdao();
    }
}
第二种,注入属性的set方法上
(这种更符合面向对象的思想,通过get,set去操作属性,而不是直接操作属性)
public class DeptInfoservice {
     private DeptInfoDao dao;

    public void dept() {
        dao.deptdao();
    }

    public DeptInfoDao getDao() {
        return dao;
    }
    @Autowired
    public void setDao(DeptInfoDao dao) {
        this.dao = dao;
    }
}
注释:虽然第二种更符合面向对象的思想,通过get,set方法来操作属性,而不是直接操作属性,虽然第一种方法是没有那么严谨的符合面向对象思想,但是不影响使用,
          本人常用的是第二种,原因嘛,很简单,就是省事,偷捷径,当然如果有不同意见,欢迎私信
          
          
@Resource          
 第二类        用bean注入的注解@Resource
   它有两个参数,一个是name,一个type    默认情况使用byName
 第一种不指定任何参数,默认按照byName来匹配对应bean,如果找不到对应的bean,则按照byType来匹配对应的bean.
public class DeptInfoservice {
    @Resource
    private DeptInfoDao dao;

    public void dept() {
        dao.deptdao();
    }
}
 
  
第二种 指定byName,
public class DeptInfoservice {
    @Resource(name="dao1")
    private DeptInfoDao dao;

    public void dept() {
        dao.deptdao();
    }
}
  
第三种指定type

当指定type时,先按照type匹配相应的bean,当有多个类型相同的bean时,通过name来自动匹配,确定唯一的对应的bean(查询了许多案例说如果指定了type,在配置文件中有多个type相同的bean,会报错,但是经过实验发现,如果有多个type相同的bean,会默认在按照byName来匹配) 
public class DeptInfoservice {
    @Resource(type=DeptInfoDao.class)
    private DeptInfoDao dao1;

    public void dept() {
        dao1.deptdao();
    }
}
  
第四种  同时指定byTyp,byName

按照指定的类型和name来确定唯一的Bean
public class DeptInfoservice {
    @Resource(type=DeptInfoDao.class,name="dao1")
    private DeptInfoDao dao;

    public void dept() {
        dao.deptdao();
    }
}  
 小弟除写博客,欢迎指导         

转载于:https://my.oschina.net/u/2324878/blog/1587305

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值