前言:
問題來源:參考博客的博主的情況是合並項目導致的沖突,我是不同的人寫代碼,命名重復了,改名又不好改(采取的改名方案是一方的代碼加個前綴單詞,看着挺累贅的)
報錯原因:spring提供兩種beanName生成策略,基於注解的sprong-boot默認使用的是AnnotationBeanNameGenerator,它生成beanName的策略就是,取當前類名(不是全限定類名)作為beanName。由此,如果出現不同包結構下同樣的類名稱,肯定會出現沖突。
正文:
1,自己寫一個類實現 org.springframework.beans.factory.support.BeanNameGeneraot接口,實現全限定類名
public class UniqueNameGenerator extends AnnotationBeanNameGenerator { @Override public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { //全限定類名 String beanName = definition.getBeanClassName(); return beanName; } }
2. 在啟動類上加注解@ComponentScan(nameGenerator = UniqueNameGenerator.class)使剛才我們自定義的BeanName生成策略生效。
@SpringBootApplication @ComponentScan(nameGenerator = UniqueNameGenerator.class) public class BeanNameConflictApplication { public static void main(String[] args) { SpringApplication.run(BeanNameConflictApplication.class, args); } }
參考博客:
談談spring-boot導致服務啟動失敗解決方案 - 流水無雙 - 博客園
https://www.cnblogs.com/bedlimate/p/8660839.html