zoukankan      html  css  js  c++  java
  • 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



  • 相关阅读:
    常用开发技巧系列(三)
    快速排序OC、Swift版源码
    一步一步学习SignalR进行实时通信_8_案例2
    一步一步学习SignalR进行实时通信_7_非代理
    一步一步学习SignalR进行实时通信_6_案例
    一步一步学习SignalR进行实时通信_5_Hub
    一步一步学习SignalR进行实时通信_4_Hub
    一步一步学习SignalR进行实时通信_3_通过CORS解决跨域
    一步一步学习SignalR进行实时通信_2_Persistent Connections
    一步一步学习SignalR进行实时通信_1_简单介绍
  • 原文地址:https://www.cnblogs.com/orange-time/p/11832414.html
Copyright © 2011-2022 走看看