20、自动装配-@Autowired&@Qualifier&@Primary

  • 自动装配:Spring 利用依赖注入(DI),完成对IOC容器中各个依赖关系赋值

20.1 @Autowired :自动注入

  • 默认优先按照类型去容器中找对应的组件,applicationContext.getBean(BookRepository.class),找到就赋值。
  • 如果找到多个相同类型的组件,再将属性名称作为组件的id 去容器中查找applicationContext.getBean("bookRepository")
  • 使用 @Qualifier("bookRepository") 指定装配组件
  • 自动装配默认一定要将属性赋值好,没有就会报错。可以使用@Autowired(required = false)来配置非必须的注入,有则注入,没有就算了。
  • @Primary 让Spring进行自动装配的时候,默认选择需要装配的bean,也可以继续使用@Qualifier 指定需要装配的bean的名称
  • @Qualifier 的权重大于 @Primary,如果指定了@Qualifier@Primary失效

20.2 代码实例

  • MainConfigOfAutowired.java
package com.hw.springannotation.config;import com.hw.springannotation.dao.BookRepository;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;import javax.management.relation.RelationType;/*** @Description 自动装配:* <p>* Spring 利用依赖注入(DI),完成对IOC容器中各个依赖关系赋值* 1. @Autowire* @Author hw* @Date 2018/11/29 16:04* @Version 1.0*/
@Configuration
@ComponentScan({"com.hw.springannotation.service", "com.hw.springannotation.controller", "com.hw.springannotation.dao"})
public class MainConfigOfAutowired {@Primary // 首选装配bean@Bean("bookRepository2")public BookRepository bookRepository() {return new BookRepository("2");}
}
  • BookService.java
@Service
public class BookService {@Autowired(required = false)// @Qualifier("bookRepository")private BookRepository bookRepository2;public void print() {System.out.println("bookRepository2。。。");}@Overridepublic String toString() {return "BookService{" +"bookRepository=" + bookRepository2 +'}';}
}
  • 测试用例
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfAutowired.class);@Test
public void test1() {BookService bookService = applicationContext.getBean(BookService.class);System.out.println(bookService);applicationContext.close();
}

转载于:https://www.cnblogs.com/Grand-Jon/p/10039340.html

20、自动装配-@Autowired@Qualifier@Primary相关推荐

  1. 自动装配——@Autowired@Qualifier@Primary

    * 自动装配; * Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值: * 1).@Autowired:自动注入: * 1).默认优先按照类型去容器中找对应的组件:appl ...

  2. 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?

    写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...

  3. 【Spring系列04】自动装配(Qualifier,Autowired,Resource讲解)

    这里写目录标题 一:Bean的自动装配 1.自动装配说明 2.测试环境搭建[方法一:在xml中显式配置] ++++++以下[方法三:隐式的bean发现机制和自动装配]+++++++ 3.byName[ ...

  4. 自动装配——@Autowired 构造器,参数,方法,属性都是从容器中获取参数组件的值||自定义组件想要使用Spring容器底层的一些组件 ApplicationContext,BeanFactory

    @Autowired:构造器,参数,方法,属性:都是从容器中获取参数组件的值 * 1).[标注在方法位置]:@Bean+方法参数:参数从容器中获取;默认不写@Autowired效果是一样的:都能自动装 ...

  5. Aop 自动装配Autowired时,不装配接口而是实现类而报错 切面配置 satisfiedDependencyException|BeanNotOfRequiredTypeException

    在学到aop时,我本来打算测试环绕通知和异常通知的 这里我是在接口AccountService的实现类AccountServiceImpl里直接定义了一个方法findByName() 但我在测试类里用 ...

  6. Spring自动装配@Autowired的三种方式

    转自:https://ahaochan.github.io/Java/JavaWeb/Spring/Spring%E8%87%AA%E5%8A%A8%E8%A3%85%E9%85%8D@Autowir ...

  7. Spring容器父子类继承关系交给spring容器管理采用@autowired自动装配分析

    第一个青春是上帝给的 第二个的青春是靠自己努力的. 在开发项目过程中开发者们可能会遇到这样的问题 @autowired自动装配模式的工作模式是:在springIOC定位所有的Bean后,这个字段需要按 ...

  8. spring自动装配的3种注解

    1.@Autowired @Qualifier @Primary 2.@Resource 3.@Inject @Autowired 自动装配 自动装配: Spring利用依赖注入(DI),完成对IOC ...

  9. 详解Spring中Bean的自动装配~

    目录 1. 环境搭建 2. byName.byType 3. 使用注解实现自动装配 @Autowired @Resource 小结 自动装配是Spring满足bean依赖的一种方式 Spring会在上 ...

  10. Spring自学日志03(作用域,自动装配)

    bean的作用域 Singleton(单例模式,是默认spring的) <bean id ="user2" class="com.injection.User&qu ...

最新文章

  1. python3 的encode 和 decode
  2. leetcode算法题--环绕字符串中唯一的子字符串★
  3. shell中正则表达式详解_【转】【shell】正则表达式使用详解(一)
  4. 前端后分离深入分析 ——浏览器渲染和服务器渲染区别
  5. C语言:L1-034 点赞 (20分)(解题报告)
  6. 五皇后问题 java_Java的5个古怪问题
  7. 【转】 谈谈C++中的swap函数
  8. JAVA:Eclipse代码和xml文件的智能提示
  9. VS2017编写C++多文件时,出现LNK2005、LNK1169报错的解决方法
  10. 解决UnicodeEncodeError: 'gbk' codec can't encode character '\xe4' in position 319等问题
  11. MarkDown 和LaTex语法学习(基于软件Typora)
  12. 让“施工进度计划”真正产生价值——不是为了做计划而计划
  13. 2018 网易校招 骰子游戏
  14. 腾达n318虚拟服务器,腾达N318无线路由器的设置教程
  15. 显卡天梯图2020年10月完整版
  16. Java--制作乱字游戏
  17. iPad如何分屏?iPad分屏详细教程来啦!
  18. Cyclone Protocol 首次中文社区亮相AMA实录(精华)
  19. 如何做数据分析报告?
  20. FPGA和eeprom通信

热门文章

  1. Activity随笔
  2. 2016数据库考试题
  3. red hat linux 6.4 DNS配置(怎么不让发表?)
  4. ABAP - 3D Graphs with SAP
  5. python类与对象的内置函数大全(BIF)
  6. OpenCV(图像处理)—访问像素的三种方法
  7. 2017省夏令营Day7
  8. JavaScript中对象的比较
  9. 八.创建型设计模式——Singleton Pattern(单例模式)
  10. VS Code 的插件位置更改