Spring Boot依赖注入多项目Bean冲突配置问题求助
解决Spring多项目依赖注入的Bean冲突问题
方案1:用@Primary指定优先Bean
给依赖项目的ConfigurationService添加@Primary注解,让Spring在依赖项目中优先选择它作为实现;公共子项目的CommonConfigurationService保留@Service,确保单独运行测试时能正常注入。
公共子项目代码:
@Service public class CommonConfigurationService implements ICommonConfigurationService { // 公共实现逻辑 }
依赖项目代码:
@Service @Primary public class ConfigurationService extends CommonConfigurationService implements IConfigurationService { // 项目自定义逻辑 }
方案2:用@Qualifier区分Bean名称
给两个实现类分别指定唯一的Bean名称,注入时通过@Qualifier明确指定要注入的Bean,避免混淆。
公共子项目代码:
@Service("commonConfigService") public class CommonConfigurationService implements ICommonConfigurationService { // 公共实现逻辑 }
依赖项目代码:
@Service("appConfigService") public class ConfigurationService extends CommonConfigurationService implements IConfigurationService { // 项目自定义逻辑 }
公共子项目测试注入:
@Autowired @Qualifier("commonConfigService") private ICommonConfigurationService configService;
依赖项目业务代码注入:
@Autowired @Qualifier("appConfigService") private IConfigurationService configService;
方案3:用@ConditionalOnMissingBean实现条件注册
给公共子项目的CommonConfigurationService添加@ConditionalOnMissingBean注解,只有当容器中没有ICommonConfigurationService类型的Bean时,才注册它。这样依赖项目中有ConfigurationService时,公共实现不会被注册,避免冲突;公共子项目测试时因为没有其他实现,会正常注册。
公共子项目代码:
@Service @ConditionalOnMissingBean(ICommonConfigurationService.class) public class CommonConfigurationService implements ICommonConfigurationService { // 公共实现逻辑 }
依赖项目代码:
@Service public class ConfigurationService extends CommonConfigurationService implements IConfigurationService { // 项目自定义逻辑 }
方案4:拆分测试与生产的Bean配置
把公共子项目中CommonConfigurationService的@Service注解去掉,生产环境不自动注册;单独写测试配置类,在测试时手动注册Bean,这样既不影响依赖项目的Bean注册,也能满足公共子项目的测试需求。
公共子项目生产代码:
public class CommonConfigurationService implements ICommonConfigurationService { // 公共实现逻辑 }
公共子项目测试配置类:
@Configuration public class TestConfig { @Bean public ICommonConfigurationService commonConfigurationService() { return new CommonConfigurationService(); } }
依赖项目代码:
@Service public class ConfigurationService extends CommonConfigurationService implements IConfigurationService { // 项目自定义逻辑 }
内容的提问来源于stack exchange,提问作者jenny
相关产品推荐
相关产品推荐

