自动装配仅在只有一个 bean 匹配时有效,如果不只有一个 bean 的话,就会阻碍 spring 自 动装配属性、构造器参数或方法参数。
解决:
- 将可选 bean 中的每一个设为首选( primary )
- 使用限定符来帮助 spring 缩小范围( qualifier )
标识首选的 bean
@Primary 可与 @Component 和 @Bean 注解配合使用。xml 中对于 bean 标签有对应的 boolean 属性 primary。
明确限定 bean
@Qualifier 注解是使用限定符的主要方式,可以与 @Autoware 和 @Inject 注解配合使用。
通过在 Bean 定义处和使用处同时使用 @Qualifier 注解,可以实现基于 String 描述的对多个限定特性进行限定(java 8 才支持重复注解,java 8 允许在一个条目上重复使用一个注解,只要这个注解本身有 @Repeatable 注解。但 @Qualifier 不支持重复注解),因此只能明确限定一个特性。
可以通过创建自定义的注解来实现限定符的功能,这些注解需要被 @Qualifier 注解注解,那么这个注解本身可以作为一个限定特性。