zoukankan      html  css  js  c++  java
  • Spring @Autowired和@Resource

    @Autowired和@Resource

    共同点:都是装配bean的注解

    不同点:

    @Autowired

    提供者:@Autowired是Spring提供的注解

    装配方式:ByType(通过类的类型)装配

    第一种注入方式

    1 // 用于字段上
    2 @Autowired
    3 private TestDao testDao;

    第二种注入方式

    1 //同时setter方法注入 
    2 //spring boot推荐使用 setter注入
    3     @Autowired
    4     public void setTestDao (TestDao testDao) {
    5        this.trayDao = trayDao;
    6     }

    个人理解:因为spring是通过注入接口找到实现该接口的类,再为这个实现类创建一个对象,最后注入对象的。

    所以意味着当一个接口有多个实现类时,想要通过type的来注入的话,Spring就会发现有两个实现类而报错。

    怎么解决一个接口多个实现类的情况。可以通过ByName来注入。

    通过为多个实现类取名字,最后指定名字来注入对象。

    当不能通过ByType注入的时候,就通过@Qualifier注解ByName注入

    1 @Autowired  @Qualifier("myTestDao")
    2 private TestDao testDao;

    @Resource

    首先@Resource是J2EE提供的注解

    @Resource一开始就完成@Autowired+ @Qualifier的功能

    @Resource既可以ByType也可以ByName来注入。

    用法

    1.同时指定name和type时,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

    1 @Resource(type = AndroidService.class,name = "aaa")
    2 private AndroidService androidService;

     2.指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常

    1 @Resource(name = "aaa")
    2 private AndroidService androidService;

    3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。

    1 @Resource(type = AndroidService.class)
    2 private AndroidService androidService;

    4.如果既没有指定name,也没有指定type;则自动按byName方式进行查找(name是实现类的对象名)。

    如果没有找到符合的bean,则回退为一个原始类型进行查找,如果找到就注入。

    证明:现在不在实现类指定名字,则默认实现类对象名

    @Resource(name = "androidServiceImpl")
    private AndroidService androidService;

    注入成功

    @Resource
    private AndroidService androidServiceImpl;

    同样注入成功。

    总结

    @Autowired:bytype只适合一对一实现接口的时候

    @Resource:byName适合一对多和一对一实现接口的时候

    所以确定接口只会被单一实现的时候,使用@Autowired

    其余情况使用 @Resource

  • 相关阅读:
    洛谷P1434 滑雪
    P1855 榨取kkksc03
    C#中将表示颜色的string转换成Color
    DevExpress的对话框XtraMessageBox的使用
    Winform中怎样根据Name获取同窗体的控件
    Winform中使用代码编写Button按钮的点击事件
    SqlServer 2014还原数据库时提示:无法在已有的""上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
    SqlServer 2014 还原数据库时提示:操作系统返回了错误5,,拒绝访问
    Windows 7 上怎样打开SQL Server 配置管理器
    SqlServer2014怎样还原数据库
  • 原文地址:https://www.cnblogs.com/Gang-Bryant/p/10887042.html
Copyright © 2011-2022 走看看