• spring的Autowired、Resource、Inject的使用


    基本知识:spring最底层使用的是Map,id是bean的id,value是bean的class或者是实例。

    1:bean的加载顺序。
    @Bean("testDao")
    public TestDao testDao3(){
    TestDao testDao = new TestDao();
    testDao.setFlag("3");
    return testDao;
    }

    @Bean("testDao")
    public TestDao testDao(){
    TestDao testDao = new TestDao();
    testDao.setFlag("2");
    return testDao;
    }

    @Repository
    public class TestDao {
    this.flag = 1;
    }

    bean只存在一个。即:flag==3的bean。
    顺序:先执行像ComponentScan注解的bean。再去执行配置方法的bean。
    如果存在相同的bean。配置里面的bean会替换注解里面的bean。
    如果配置文件存在多个相同的bean。只会保存第一个方法的bean。

    2:当IOC容器中存在不同的bean的id,但实例相同的时候。
    @Bean("testDao1")
    public TestDao testDao(){
    return new TestDao();
    }

    TestDao testDao = app.getBean(TestDao.class); 直接会报错。
    expected single matching bean but found 2: testDao,testDao2

    3:获取容器中不存在的bean的时候
    Object o = app.getBean("aaa"); 直接报错。
    No bean named 'aaa' available

    4:Autowired的使用
    @Autowired
    private TestDao testDao123;

    Autowired首先会根据testDao123去找bean的Id ,如果没有会根据bean的实例去查找。
    如果没有找到会报错。 No qualifying bean of type 'TestDao' available:
    当实例相同的时候。会报错
    available: expected single matching bean but found 2: testDao,testDao3

    当有多个实例的时候。Qualifier可以指定哪一个实例。
    @Qualifier(testDao3)

    也可以使用@Primary进行制定,会首选。但是如果使用多个的话,会报错误。
    more than one 'primary' bean found among candidates: [testDao, testDao13]

    required = false,在初始化IOC的时候,如果没有对应的bean,不会报错。设置为null。

    5:Resource的使用
    @Resource
    private TestDao testDao123;

    Resource首先会根据testDao123去找bean的Id ,如果没有会根据bean的实例去查找。
    如果没有找到会报错。 No qualifying bean of type 'TestDao' available:

    当实例相同的时候。会报错
    expected single matching bean but found 2: testDao,testDao3

    @Resource(name = "testDao13")
    name指定的是bean的name并不是id

    @Resource(type = TestDao.class)
    type指定类型。首先去查找bean的id=testDao。
    如果没有再去指定类型。当实例相同的时候。会报错。

    6:Inject的使用
    @Inject
    private TestDao testDao123;

    Inject首先会根据testDao123去找bean的Id ,如果没有会根据bean的实例去查找。
    如果没有找到会报错。 No qualifying bean of type 'TestDao' available:

    当实例相同的时候。会报错
    expected single matching bean but found 2: testDao,testDao3



  • 相关阅读:
    Delphi代码获取网卡物理地址三种方法 本文来自Delphi之窗,原文地址:http://www.52delphi.com...
    SQL SERVER 中实现公历到农历的转换
    cxgrid相同列合并显示
    rzCheckList.ItemChecked[Index]就可以判断指定节点地状态.
    为什么PING域名得到IP与实际公网IP不符
    如何让sql server2005和sql server2000共存安装在同一机器上
    如何编译通过 Raize 5.3 中的 RzBorder.pas
    u6升级到u890的过程
    技术部门到底该如何管理才能“和谐”
    在CXGRID中如何让字段能以0.00的格式显示
  • 原文地址:https://www.cnblogs.com/orange-time/p/11832414.html
Copyright © 2020-2023  润新知