基本知识: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

最新文章

  1. LeetCode: 3Sum
  2. android 如何结束一个线程
  3. Highcharts用函数动态填充静态值
  4. PHP无限级分类-递归(不推荐)
  5. linux ssh免密码登录设置
  6. javascript 浮点运算
  7. asp.net读取txt并导入数据库
  8. 认识ASP.NET MVC的5种AuthorizationFilter
  9. 初识RabbitMQ,附RabbitMQ+PHP演示实例
  10. PHP 关于判断输入日期是否合法
  11. [转帖]AMOLED的技术和OLED有哪些联系和区别
  12. 【Thymeleaf】浅谈Java模板引擎(带更新...)
  13. (转!)Pyinstaller 打包发布经验总结
  14. vue入手
  15. Tracking Boost Regulator TYPICAL 5V REGULATION WITH BOOST CONVERTER AND LDO
  16. 【转】C# 开发Chrome内核浏览器(WebKit.net)
  17. 第五次Scrum meeting
  18. Couldn't find an AF_INET address for
  19. python之旅:常用模块
  20. MAVEN打zip包

热门文章

  1. Wise Force Deleter 强制删除文件工具
  2. AC与AP的安装使用(未经实战,仅供参考,未完待续)
  3. vue地图可视化 ArcGIS篇
  4. [LeetCode] 407. Trapping Rain Water II 收集雨水 II
  5. 【视频开发】【Live555】摄像头采集,264编码,live555直播
  6. [02]Go设计模式:原型模式(Prototype )
  7. springboot实战日记(一)数据库基本信息
  8. Windows 反弹 Shell
  9. Qt deletelater函数分析(1)
  10. iframe跨端口报错 Blocked a frame with origin from accessing a cross-origin frame