23 SpringBoot @Qualifier注解
//定义亚洲人
@Qualifier("Asian")
@Component
public class AsianMan extends Person {}········//定义欧洲人
@Qualifier("Europe")
@Component
public class EuropeMan extends Person {}
注入bean时,可以使用@Autowired自动注入
public class Controller {@Qualifier("Asian") //指定注入的是Asain的bean@Autowiredprivate Person person;}
也可以使用xml配置
<bean id="controller" class="org.leisu.Controller"><qualifier type="org.springframework.beans.factory.annotation.Qualifier" value="Asian"/>
</bean>
可以看到,在生成两个继承了Person的bean时,通过@Qualifier()注解指定了两个bean的特征,分别为:“Asian“、”Europe“;在注入bean时,静态类型是父类Person,通过@Qualifier()指定注入的bean为”Asian“
2. bean已有id,为什么还用@Qualifier?
上面的例子,我们可以把两个bean的id分别设为“Asian“、”Europe“,然后用@Resource(name="***")也同样能实现相关功能,那为什么还要用@Qualifier?
个人理解@Qualifier是个修饰词,不需要bean_id不可重复那么严格,比较灵活。那么就可以把其中的参数作为一种修饰,作为bean的形容词来进行更细致的描述。在《Spring实战》书中,举例是类IceCream(冰淇淋)和Dessert(甜点)都用@Qualifier(”cold“)来修饰,意思是凉的冰淇淋和甜点。
因此使用@Qualifier,更加灵活,也更符合面向对象的思想。
2. @Qualifier加在注解上
上面的例子中,可以看到是使用@Qualifier()中value的参数来筛选bean的,本文给此参数起个名字,叫做修饰语。修饰语是字符串类型,可以设置各种值。
如果一个工程的修饰语种类特别多,或者修饰语语义之间有继承等类似复杂关系,或者需要用多个修饰语修饰同一个bean,那用这种直接的方式就不太好操作了。修饰语value字符串容易拼错,容易混淆,更不容易被编辑器检测出来,调试bug困难。
因此可以自定义一个新的注解,使用@Qualifier修饰,制作自己的修饰语注解
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier("Asian") //使用@Qualifier自定义修饰注解Asian
public @interface Asian{ ... }
···············
//定义亚洲人
@Asian //使用我们自定义的修饰注解
@Component
public class AsianMan extends Person {
}
注入
public class Controller {
@Asian //指定注入的是Asain的bean
@Autowired
private Person person;
}
23 SpringBoot @Qualifier注解相关推荐
- SpringBoot的注解@Qualifier用法
在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢? 根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 请忽略我的红线 ##在C ...
- ssm与springboot常见注解
MyBatis中常见的注解 @Insert:设置添加数据的SQL语句注解,标注在数据访问层的方法上 @Insert("insert into student_tab values(null, ...
- Spring学习(10)--- @Qualifier注解
按类型自动装配可能多个bean实例的情况,可以使用Spring的@Qualifier注解缩小范围(或指定唯一),也可以指定单独的构造器参数或方法参数 可用于注解集合类型变量 例子: package c ...
- 【日常】SpringBoot缓存注解器及整合redis实现(附近期一些python零碎的内容)
序言 似乎灵感枯竭了,完全不知道该写些什么东西,非常的痛苦,决定走读博这条路之后就失去了很多乐趣,总是想应该积累更多的论文和相关项目代码量,但是效率却总是很低,需要应付课程与考试,一篇paper的阅读 ...
- SpringBoot常用注解
1.@SpringBootApplication 包含@Configuration.@EnableAutoConfiguration.@ComponentScan通常用在主类上: 2.@Compone ...
- 40 个 SpringBoot 常用注解
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://ramostear.com/ 一.Spring Web MVC 与 Spring Bean 注解 Spri ...
- 在方法的形参位置使用@Qualifier注解||@Autowired 与@Resource的区别
实验21:在方法的形参位置使用@Qualifier注解 实验22:@Autowired注解的required属性指定某个属性允许不被设置 @Autowired @Resource @Inject ...
- @retention注解作用_分分钟带你玩转SpringBoot自定义注解
在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...
- 请举例说明@Qualifier 注解?
@Qualifier 注解意味着可以在被标注bean 的字段上可以自动装配.Qualifier 注解可以用来取消Spring不能取消的bean 应用.
最新文章
- python恶搞-如何用python和vbs恶搞基友?
- 手机控件查看工具uiautomatorviewer
- linux apt-get 源,Ubuntu应用之——apt-get更改源地址
- 7、Flask实战第7天:Jinjia2模板
- laravel静态资源
- [机器学习]XGBoost 和 LightGBM 参数对比与调参
- [Xcode 实际操作]五、使用表格-(11)调整UITableView的单元格顺序
- 关于JVM方法调用的那些事
- boost 学习笔记
- 对adapter的封装优化
- 【HDOJ6955】Xor sum(异或前缀和,01字典树)
- 力扣题目系列:204. 计数质数
- vue中的混入mix
- NTC热敏电阻的时间常数
- 蜀门Online 简单打怪脚本(vbs)
- docker-compose 部署mysql一直重启
- C#winform中OpenFileDialog的用法
- 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
- DevOps入门系列--前瞻性--前瞻性思维
- 射频器件厂商RFMD与TriQuint达成合并协议