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
spring的Autowired、Resource、Inject的使用的更多相关文章
- @Autowired @Resource @Inject 自动注入
一.@AutoWired ( spring 的注解 )自动注入 /** * @Autowired: * 默认按照 Student 类型去容器中找对应的组件:applicationContext.get ...
- Spring Injection with @Resource, @Autowired and @Inject
August 1st, 2011 by David Kessler Overview I’ve been asked several times to explain the difference b ...
- spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异
为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...
- Spring @Resource, @Autowired and @Inject 注入
Overview I’ve been asked several times to explain the difference between injecting Spring beans with ...
- Spring 注释标签@Resource @Autowired 和@Inject的区别
一些spring的开发人员在使用这三个标签进行注入的时候感到困惑.我来尝试解释一下这三个注解的主要区别.事实上,这三者非常相似,只存在一些微小的差别.在稍后的文章中会进行解释. @Resource-在 ...
- Spring中@Autowired、@Resource和@Inject注解的使用和区别
在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理. 下面介绍 ...
- Wiring in Spring: @Autowired, @Resource and @Inject 区别
refer:https://www.baeldung.com/spring-annotations-resource-inject-autowire 主要是查找顺序不一致: @Resource Mat ...
- spring注解-@Autowired。@Resource。@Service
Spring的@Autowired注解.@Resource注解和@Service注解 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: ...
- annotation之@Autowired、@Inject、@Resource三者区别
一.@Autowired 1.@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入: 2.@Autowire ...
- Spring 注释 @Autowired 和@Resource
一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired属于Spring的:@Resource为JSR-250标准的注释,属于J ...
随机推荐
- odoo开发笔记 -- 跨域Refused to display in a frame because it set 'X-Frame-Options' to 'DENY'
场景描述: odoo界面嵌入iframe,Refused to display in a frame because it set 'X-Frame-Options' to 'DENY' 跨域请求失败 ...
- elasticsearch jestclient api
1.es search sroll 可以遍历索引下所有数据 public class TestDemo { @Test public void searchSroll() { JestClientFa ...
- Python3基础 tuple list转为tuple
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- Qt QJson解析json数据
Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...
- 使用 Fiddler 代理调试本地手机页面
文件下载:http://files.cnblogs.com/files/dtdxrk/fiddler4_4.6.2.0_setup.rar 从事前端开发的同学一定对 Fiddler 不陌生,它是一个非 ...
- springboot实战日记(一)数据库基本信息
摘要:基于spring boot的后端实现,开发一个微信小程序点餐系统,主要是写写思路和遇到的问题以及分享读到的好文章. 项目分析: 1.角色划分,就是开有什么人使用这个系统,买家(手机端),卖家(p ...
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- Robot Framework 读取控制面板安装的程序,判断某个程序是否已经安装
wmic /output:D:\\DOAutomationTest\\automation_do_robotframework\\installList.txt product get name
- Django框架深入了解_02(DRF之序列化、反序列化)
序列化:将Python对象准换成json格式的字符串,反之即为反序列化 DRF的序列化使用过程: 使用drf的序列化组件 -1 新建一个序列化类继承Serializer -2 在类中写要序列化的字段 ...
- 继承 多态 封装 Python面向对象的三大特性
1. 封装: 把很多数据封装到⼀个对象中. 把固定功能的代码封装到⼀个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 那这个也可以被称为封装. 2. 继承: 两个 ...