基本知识: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的使用的更多相关文章

  1. @Autowired @Resource @Inject 自动注入

    一.@AutoWired ( spring 的注解 )自动注入 /** * @Autowired: * 默认按照 Student 类型去容器中找对应的组件:applicationContext.get ...

  2. 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 ...

  3. spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异

    为了探寻 '@Resource', '@Autowired', 和'@Inject'如何解决依赖注入中的问题,我创建了一个"Party"接口,和它的两个实现类"Perso ...

  4. Spring @Resource, @Autowired and @Inject 注入

    Overview I’ve been asked several times to explain the difference between injecting Spring beans with ...

  5. Spring 注释标签@Resource @Autowired 和@Inject的区别

    一些spring的开发人员在使用这三个标签进行注入的时候感到困惑.我来尝试解释一下这三个注解的主要区别.事实上,这三者非常相似,只存在一些微小的差别.在稍后的文章中会进行解释. @Resource-在 ...

  6. Spring中@Autowired、@Resource和@Inject注解的使用和区别

    在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理. 下面介绍 ...

  7. Wiring in Spring: @Autowired, @Resource and @Inject 区别

    refer:https://www.baeldung.com/spring-annotations-resource-inject-autowire 主要是查找顺序不一致: @Resource Mat ...

  8. spring注解-@Autowired。@Resource。@Service

    Spring的@Autowired注解.@Resource注解和@Service注解 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: ...

  9. annotation之@Autowired、@Inject、@Resource三者区别

    一.@Autowired 1.@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入: 2.@Autowire ...

  10. Spring 注释 @Autowired 和@Resource

    一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired属于Spring的:@Resource为JSR-250标准的注释,属于J ...

随机推荐

  1. PhpStorm使用sftp实现代码自动上传服务器

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/huihui940630/article/ ...

  2. Qt button按钮添加Label标签播放GIF图片

    QPushButton btn = new QPushButton(); QVBoxLayout* layout = new QVBoxLayout(btn); QLabel* label = new ...

  3. Dockerfile实例

    一.先看最简单的例子,定制nginx镜像,打印出 <h1>Hello, Docker!</h1> Dockerfile文件: FROM nginx RUN echo '< ...

  4. VS Code中配置python版本以及Python多版本

    VS Code中配置python版本VS Code十分方便配置python的版本:可以选在在本地setting.json或者全局setting.json文件中配置:python.pythonPath在 ...

  5. **80. Remove Duplicates from Sorted Array II 删除排序数组中的重复项 II

    1. 原始题目 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件 ...

  6. git让线上代码强制覆盖本地的

    git强制覆盖本地命令(分步执行): git fetch --all    git reset --hard origin/master    git pull git强制覆盖本地命令(单条执行):  ...

  7. [LeetCode] 451. Sort Characters By Frequency 根据字符出现频率排序

    Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...

  8. QML 下拉列表框的使用

    世界上一成不变的东西,只有"任何事物都是在不断变化的"这条真理. -- 斯里兰卡 ComboBox { id:combox x: structureTab_label2.x+str ...

  9. TP5 模型CURD

    ThinkPHP5的模型是一种对象-关系映射(Object / Relation Mapping ,简称 ORM)的封装,并且提供了简洁的ActiveRecord实现.一般来说,每个数据表会和一个“模 ...

  10. LeetCode 611. 有效三角形的个数(Valid Triangle Number)

    611. 有效三角形的个数 611. Valid Triangle Number 题目描述 LeetCode LeetCode LeetCode611. Valid Triangle Number中等 ...