【SpringBoot】【1】解決不同包結構下,同樣的類名沖突的問題


前言:

問題來源:參考博客的博主的情況是合並項目導致的沖突,我是不同的人寫代碼,命名重復了,改名又不好改(采取的改名方案是一方的代碼加個前綴單詞,看着挺累贅的)

報錯原因: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM