spring--bean自动装配的歧义性
来源:互联网 发布:get it beauty 产品 编辑:程序博客网 时间:2024/05/16 15:53
在之前的博客中,我曾经提到过当spring自动装配bean时,有可能会遇到这样的情况,有多个bean符合条件,那么spring就会抛出异常,这篇博客,我们就来学习一下怎么样解决这个问题.
1. 例子
@Autowired public void setDessert(Dessert dessert) { this.dessert = dessert; }
此处,Dessert是一个接口,并且有三个类实现了这个接口:
@Componentpublic class Cake implements Dessert{...}@Componentpublic class Cookies implements Dessert{...}@Componentpublic class IceCream implements Dessert{...}
可见,三个类都被@Component修饰,自动扫描时,都会创建bean,但是当注入时,由于Spring不知道要注入哪个bean,所以会抛出异常.
2. 首选bean
spring提供的第一种解决方案就是首选bean,在声明bean的时候,可以将其中一个bean设置为首选(primary),当spring遇到歧义性的时候,会使用首选bean,但是我们要注意,如果申明了多个首选bean,那么spring还是无法从多个首选bean中做出选择,所以也会抛出异常. 在Java配置中,我们可以使用注解@Primary来声明该bean为首选bean,例如:
@Component@Primarypublic class Cake implements Dessert{...}
或
@Bean @Primary public Dessert getCake(){ return new Cake(); }
在XML配置中,我们可以使用<bean>标签的primary属性来声明首选bean:
<bean id="cake" class="xxx.xxx.Cake" primary="true" />
3. 设置bean限定符
在某些情况下,首选bean的方案可能并不能满足我们的需求,spring还提供了一种限定符的方案,限定符主要是使用注解@Qualifier来完成,例如:
@Autowired @Qualifier("iceCream") public void setDessert(Dessert dessert) { this.dessert = dessert; }
这个例子,其实就是将限定符为iceCream的bean注入.默认情况下,每个bean都有一个限定符,默认和bean的id是一样的,我们也可以自定义bean的限定符:
@Component@Qualifier("cake")public class Cake implements Dessert{...}
或
@Bean@Qualifier("cake")public Dessert getCake(){ return new Cake();}
0 0
- spring--bean自动装配的歧义性
- Spring中Bean装配的歧义性
- Spring-处理自动装配的歧义性
- spring处理自动装配的歧义性
- Spring学习笔记之处理自动装配的歧义性
- Spring 全注解配置 bean 和 调用 (4) @Primary 自动装配歧义性
- Spring 全注解配置 bean 和 调用 (5) @Qualifier 自动装配歧义性消除
- Spring 全注解配置 bean 和 调用 (6) 自定义注解 自动装配歧义性消除
- 十四、处理自动装配的歧义性
- 处理自动装配的歧义性
- 处理自动装配的歧义性
- Spring Bean的装配 -- 自动装配
- [Spring]Bean的自动装配
- # Spring Bean 的自动装配
- spring bean的自动装配
- spring bean的自动装配
- Spring的自动装配Bean
- Spring bean的自动装配
- 初窥Linux 之 我最常用的20条命令
- 记录大宝贝的点滴
- 第4章 类的基本概念
- nyoj16 矩形嵌套
- CWnd与HWND的区别与转换
- spring--bean自动装配的歧义性
- C++的Json解析库:jsoncpp
- 左右滑动切换Activity
- 【Oracle index】组合索引如何选择前导列的几点考虑
- Maven3路程(三)用Maven创建第一个web项目(1)
- POJ1915(Knight Moves,双向BFS)
- HDOJ-----2824The Euler function欧拉函数
- Android OkHttp
- Android对于广告图的处理方式