Spring注解驱动开发-part4自动装配

本文深入解析Spring框架中的依赖注入(DI)机制,包括@AutoWired、@Qualifier、@Primary等注解的使用,以及自动装配、按类型匹配、按名称匹配的原理。探讨不同注解的优先级和如何在多实例环境中指定首选Bean。

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

使用@AutoWired

在这里插入图片描述

在这里插入图片描述自动装配的Bean和我们直接get的Bean是同一个(对了Bean默认是单例的啊!)
在这里插入图片描述

自动注入时,默认优先按照类型找到对应的组件

当同一类型有多个组件被注册,优先装配哪个呢?
在这里插入图片描述
配置文件:
在这里插入图片描述
Bean文件
在这里插入图片描述
测试后,发现:

有多个该类型的组件时,优先按属性名进行匹配

附:

当且仅当CarDao是单实例Bean时,可使用context.getBean(Class requiredType) T

结合@Qualifier注解,指定自动装配的bean

在这里插入图片描述

如果指定的bean实例可能不存在,并且允许不存在呢?
可以使用@AutoWired(required=false)

@Bean结合@Primary,指定自动装配首选bean

在这里插入图片描述
虽然属性名为carDaoF,但是因为首选注解,实际装配的是carDaoX

注意:@Qualifier的优先级要高于@Primary
在同时使用两个注解的情况下,优先装配Qualifier指定的bean

使用@Resource代替@AutoWired

在这里插入图片描述

在这里插入图片描述

@Resource默认按属性名称匹配

虽然在配置类中使用了@primary注解,但是@resource默认是按照属性名称匹配!
@resource 不支持 @primary注解,也不支持类似@AutoWired(required=false/true)功能
在这里插入图片描述

使用@Inject代替@AutoWired

需要先导入JSR330规范的javax.inject依赖

	<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
	<dependency>
	    <groupId>javax.inject</groupId>
	    <artifactId>javax.inject</artifactId>
	    <version>1</version>
	</dependency>

@Inject支持@Primary,但是不支持required=false

@AutoWired标注在set方法上

在这里插入图片描述

@AutoWired标注在有参构造函数上

在这里插入图片描述

@AutoWired放在参数类型前

在这里插入图片描述
在这里插入图片描述

自定义组件使用Spring容器底层接口

自定义组件实现xxxAware:在创建对象的时候,会调用接口规定的方法注入相关组件;Aware把Spring底层一些组件注入到自定义的Bean中
在这里插入图片描述

使用Profile动态激活和切换组件和功能

在这里插入图片描述
加了环境注解的Bean只有对应环境被激活时才能被注册到容器中!

使用RunConfig设置环境标志

在这里插入图片描述测试结果
在这里插入图片描述

使用代码设置环境标志

在这里插入图片描述当@Profile注解写在配置类上时

只有满足对应环境标志时,才会可能注册配置类内部组件,否则概不注册
对于没有@Profile标志的bean,任何环境下都是可以加载的,可被配置类头部环境判断否决

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值