【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary
自动装配 01 @Autowired & @Qualifier & @Primary
自动装配:Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值
常用@Autowired
- 默认优先按照类型去容器中找对应的组件
- 若ioc中有多个同类型的bean,再将属性名称作组件id去容器中查找(会报错 )
也可以使用
@Qualifier("[beanName]")
来指定注入bean,这种情况下可以存在相同类型的多个bean‘如果没有bean,会报错 自动装配默认一定要将属性赋值好,否则会报错
可以修改这种默认设置:
@Autowired(required=false)
多数据源的时候用的多@Primary:让Spring进行自动装配的时候默认使用首选的bean,也可以继续使用
@Qulifier
指定需要装配的bean的名字优先级:@Qulifier > @Primary
@Primary测试
常用@Autowired
BookDao.java
@Repository
public class BookDao {private Integer lable = 1;public Integer getLable() {return lable;}public void setLable(Integer lable) {this.lable = lable;}@Overridepublic String toString() {return "BookDao{" +"lable=" + lable +'}';}
}
BookService.java
@Service
public class BookService {@Autowiredprivate BookDao booKDao;@Overridepublic String toString() {return "BookService{" +"booKDao=" + booKDao +'}';}
}
BookController.java
@Controller
public class BookController {@Autowiredprivate BookService bookService;
}
配置类
MainConfig4Autowire.java
package com.example.annotations.config;import com.example.annotations.dao.BookDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;@Configuration
@ComponentScan(value = {"com.example.annotations.service","com.example.annotations.dao","com.example.annotations.controller"})
public class MainConfig4Autowire {@Bean("bookDao2")public BookDao bookDao(){BookDao bookDao = new BookDao();bookDao.setLable(2);return bookDao;}
}
测试:
@Testvoid autowiredTest(){//配置类测试AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig4Autowire.class);System.out.println("容器创建完毕");//获取beanSystem.out.println("准备获取bean");BookService bookService = applicationContext.getBean(BookService.class);System.out.println(bookService.toString());System.out.println("获取完毕");//关闭容器applicationContext.close();System.out.println("容器已关闭");}
运行结果:
配置类不加 @Primary
的时候,启动测试会报错,因为有两个BookDao的bean;配置类如果不指定注入的话,运行结果如下:
@Qualifier测试
配置类:
@Configuration
@ComponentScan(value = {"com.example.annotations.service","com.example.annotations.dao","com.example.annotations.controller"})
public class MainConfig4Autowire {// @Primary@Bean("bookDao2")public BookDao bookDao(){BookDao bookDao = new BookDao();bookDao.setLable(2);return bookDao;}
}
BookService.java
@Service
public class BookService {@Autowired@Qualifier("bookDao2")private BookDao booKDao;@Overridepublic String toString() {return "BookService{" +"booKDao=" + booKDao +'}';}
}
运行结果:
【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary相关推荐
- Spring中的自动装配和Autowired
彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...
- 自动装配——@Autowired@Qualifier@Primary
* 自动装配; * Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值: * 1).@Autowired:自动注入: * 1).默认优先按照类型去容器中找对应的组件:appl ...
- 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?
写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...
- (二)Spring自动装配
Spring自动装配 为了减少XML的配置数量.Spring提供了几种技巧来解决这一问题: 自动装配(autowiring): 有助于减少<property>元素和<constroc ...
- spring自动装配的3种注解
1.@Autowired @Qualifier @Primary 2.@Resource 3.@Inject @Autowired 自动装配 自动装配: Spring利用依赖注入(DI),完成对IOC ...
- Spring自动装配注解
Spring自动装配注解 注解 来源 特点与区别 备注 @Autowired Spring定义 Spring提供自动装配注解 @Autowired详解 @Resource(JSR250) java注解 ...
- Spring 自动装配及其注解
一.属性自动装配 首先,准备三个类,分别是User,Cat,Dog.其中User属性拥有Cat和Dog对象. 1 package com.hdu.autowire; 2 3 public class ...
- Spring—自动装配与注解自动装配
目录 自动装配 Spring支持5种自动装配模式 演示自动装配 1. no 默认装配方式 2.使用 byName 自动装配 3.使用 byType 自动装配 4.使用 constructor 自动装配 ...
- Spring的自动装配方法
Spring的装配方式 我们已经了解了依赖注入的基本原理,初识了@Component和@AutoWired标注的用法.为一个应用中的Beans的配置依赖注入关系的过程称之为装配(Wiring). Sp ...
- java集成测试_基于TestNG+Mockito及自动装配注解的Spring MVC集成测试
本文主要总结自己近期在项目中对MVC集成测试的实践及理解,因为先前对这块未实践过.主要参考了官方文档<11.3.6 Spring MVC Test Framework>这一章节内容,涉及到 ...
最新文章
- JavaWeb_响应和请求数据包
- solr之schema.xml中文翻译
- uva1509(暴力dfs)
- 设计模式-原型模式(Prototype)
- 在ubuntu中使用MYBASE
- 获取异常信息_如何在 ASP.NET Core 中实现全局异常拦截
- 董小姐尴尬了?被判赔偿奥克斯1.67亿,格力回应已上诉
- 漫画:应用程序被拖慢?罪魁祸首是 Log4j!
- Java数据库编程---JDBC操作步骤及数据库连接操作
- Ueditor word图片转存按钮灰色无法激活
- 北理珠计算机专业在广东排第几,北理珠2019广东美术类生源位居全省同类院校第一!...
- 仿英雄联盟LOL网页设计作业 HTML CSS游戏官网网页模板 大学生游戏介绍网站毕业设计 DW游戏主题网页模板下载 游戏娱乐网页成品代码 英雄联盟网页作品下载
- cadvisor 离线安装
- 微信小程序 有赞UI关于Tab 标签页的坑
- RF(射频) - VSWR(电压驻波比)
- antd tooltip 修改样式
- 图像一阶导数和二阶导
- 浅谈编程能力的培养与提高——写给编程初学者的话
- 使用 Power Query 制作工资条
- 常见的网站推广方法有哪些?
热门文章
- 双管理人模式下的契约型私募基金实用发行指南
- 小银行忍痛放弃资管业务? 转型渠道代销是大势所趋
- (转)郭广昌:复星账上有400亿现金,未来十年一切围绕C2M战略
- SpringCloud 应用在 Kubernetes 上的最佳实践(一):开发篇 | 凌云时刻
- 新品Demo —— ZStack Mini 超融合一体机
- 3d游戏编程大师技巧 源代码_C/C++编程新手入门基础系列:俄罗斯方块小游戏制作源代码...
- 毕设题目:Matlab通信
- 【图像压缩】基本matlab DCT+量化+huffman JPEG图像压缩【含Matlab源码 1217期】
- 【脑电信号】基于matlab小波工具箱脑电降噪【含Matlab源码 707期】
- 【股价预测】基于matlab最小二乘法股票价格预测【含Matlab源码 348期】