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 ...
随机推荐
- Oracle系列三 过滤和排序
WHERE子句 使用WHERE 子句,将不满足条件的行过滤掉. 示例: SELECT employee_id, last_name, job_id, department_id FROM employ ...
- ISO/IEC 9899:2011 条款6.10——预处理指示符
6.10 预处理指示符 语法 1.preprocessing-file: groupopt group: group-part group group-part group-part: if-s ...
- FreeSWITCH命令大全
FreeSWITCH启动.查看.及关闭 FreeSWITCH一般安装在路径 /usr/local/freeswitch ,可执行程序位于/usr/local/freeswitch/bin 下,配置文件 ...
- 使用命令行操控vmware--安装
在虚拟化出现之前,服务器的使用率很低,一般只有15%-20%,其余的资源处于闲置状态,但vmware出现之后,首先,可以充分的利用资源,从而达到节约成本的目的,其次,使得虚机便于维护.一般小型公司使用 ...
- GitLab数据备份与恢复
创建备份 $ sudo gitlab-rake gitlab:backup:create 执行完备份命令后会在/var/opt/gitlab/backups目录下生成备份后的文件,如150080913 ...
- 机试指南第二章-经典入门-Hash的应用自解
Hash的应用: Hash即散列,不像数据结构与算法中讲的各种Hash方法和冲突处理等过多的阐述,以下主要介绍Hash在机试试题解答中的作用. 例2.5 统计同成绩学生人数 Hash解法AC代码:(一 ...
- Java-Initialization
package interfaces.music; abstract class Base{ Base(){ print(); } public abstract void print(); } cl ...
- ll问题
不能直接用ll 要用__int64 (64和int 之间无空格) #define ll __int64
- [转帖]Xshell改字体,改大小,改快捷键方法
Xshell改字体,改大小,改快捷键方法 -- :: Jason Ho 阅读数 62更多 分类专栏: Software 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附 ...
- Spring Cloud初认识
一.MicroService基本描述 微服务(MicroService)架构产生的原因:解决单体应用框架的缺点. 单体应用(Monolith)框架:所有的代码及功能都包含在一个WAR包中的项目组织方式 ...