Spring框架学习--装配歧义的处理

本文介绍了在Spring框架中如何解决自动装配时产生的歧义性问题。通过设置首选bean或使用限定符来确保正确注入所需的bean。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动装配时,当且仅有一个bean时是有效的。如果不只有一个bean能够匹配结果的话, 这种歧义性会阻碍Spring自动装配属性、 构造器参数或方法参数。更精确地说, 此时Spring会抛NoUniqueBeanDefinitionException。
当发生歧义性的时候, Spring提供了多种可选方案来解决这样的问题。 可以将可选bean中的某一个设为首选(primary) 的bean, 或者使用限定符(qualifier) 来帮助Spring将可选的bean的范围缩小到只有一个bean。

primary的bean
在声明bean的时候, 通过将其中一个可选的bean设置为首选(primary) bean能够避免自动装配时的歧义性。 当遇到歧义性的时候, Spring将会使用首选的bean, 而不是其他可选的bean。 这相当于告诉Spring这是你最希望选择的bean。
在Spring中, 可以通过@Primary来表达最喜欢的方案。 @Primary能够与@Component组合用在组件扫描的bean上, 也可以与@Bean组合用在Java配置的bean声明中。
使用XML配置bean, 同样可以实现这样的功能。 <bean>元素有一个primary属性用来指定首选的bean:只需将其设置为true即可,即primary=”true”。

限定自动装配的bean
如果有两个或多个primary的bean,依然会产生歧义。也就是说,使用@Primary仍然无法将可选方案的范围限定到唯一一个无歧义性的选项中。它只能标示一个优先的可选方案。

Spring的限定符能够在所有可选的bean上进行缩小范围的操作, 最终能够达到只有一个bean满足所规定的限制条件。 如果将所有的限定符都用上后依然存在歧义性, 那么可以继续使用更多的限定符来缩小选择范围。而@Qualifier注解是使用限定符的主要方式。 它可以与@Autowired和@Inject协同使用, 在注入的时候指定想要注入进去的是哪个bean。 为@Qualifier注解所设置的参数就是想要注入的bean的ID。

顺便说一下,Java不允许在同一个条目上重复出现相同类型的多个注解。 如果这样做的话, 编译器会提示错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值