标签:prim null ret ble spring getbean 多个 方法 vat
基本知识: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
spring的Autowired、Resource、Inject的使用
标签:prim null ret ble spring getbean 多个 方法 vat
原文地址:https://www.cnblogs.com/orange-time/p/11832414.html