基本知识: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. 修改 commit 历史

    修改 commit 历史 参考:修改 git 历史提交 commit 信息(重写历史)git 修改已提交的内容 git init echo t.md>.gitignore git add .gi ...

  2. laravel 解决 Please provide a valid cache path 问题

    这是因为laravel的缓存路径没有找到 laravel缓存文件路径是在 config/cache.php中设置,默认存在storage文件夹中 解决: 创建目录: mkdir -p storage/ ...

  3. php连接mysql8报错如何解决

    php版本为5.6,连接mysql8.0时报错,但是连接其他mysql8前的版本是正常的 原因可能是mysql8默认的使用密码认证方式不一样,mysql8.0默认使用caching_sha2_pass ...

  4. [LeetCode] 139. Word Break 单词拆分

    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine ...

  5. [LeetCode] 355. Design Twitter 设计推特

    Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and ...

  6. Java分布式定时任务

    分布式定时任务 elastic-job 可以实现任务分片 quartz 可以把任务存入数据库,实时生成任务(添加数据库添加定时任务) 文档 中文翻译 翻译2

  7. 【C/C++开发】TinyXml操作(含源码下载)

    前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. 这个解析库的模型通过解析XM ...

  8. VS2013+OpenCV3.4.2编译

    一.准备工作: (1)在OpenCV官网下载3.4.2版本(注意选择Win pack),https://opencv.org/releases.html. (2)下载Contrib模块,https:/ ...

  9. Linq调试实时输出信息扩展方法(摘抄)

    原文在此 [译]如何在C#中调试LINQ查询 原linq语句: var res = employees .Where(e => e.Gender == "Male") .Ta ...

  10. java注解简单使用

    java注解可以比喻成标签,可以贴在任何地方,也可以限制只能贴在固定地方,比如类上方.方法上方.属性[字段]上方等,然后通过反射,判断是否存在这个注解. 注解形式 public @interface ...