Spring多Profile激活时Bean重复定义问题求助
问题分析与解决
问题原因
Spring中@Profile注解的数组参数是**逻辑或(OR)**关系,而非逻辑与(AND)。
你定义的ReceiveActivityVerifier4Test上的@Profile({"!signatureTest", "test"})意味着:只要激活的profile包含!signatureTest或者test,这个Bean就会被创建。当前你激活了test profile,满足第二个条件,所以这个Bean会被实例化。
同时TestReceiveFollowActivityUnauthorizedConfig的@Profile({"signatureTest", "test"})也因激活了test或signatureTest而生效,导致两个SignatureVerifierFactory类型的Bean同时存在,触发NoUniqueBeanDefinitionException。
解决方案
要实现「仅当激活test且未激活signatureTest时,才创建ReceiveActivityVerifier4Test」的逻辑,需要使用Spring的SpEL表达式来表达逻辑与关系:
修改ReceiveActivityVerifier4Test的@Profile注解:
@Service @Profile("test & !signatureTest") public class ReceiveActivityVerifier4Test implements SignatureVerifierFactory { // ... 原有代码 }
这样只有当test激活且signatureTest未激活时,这个Bean才会被创建;当同时激活test和signatureTest时,该Bean不会被实例化,避免冲突。
内容的提问来源于stack exchange,提问作者naturzukunft
相关产品推荐
相关产品推荐

