-
錯誤的原因
spring的源碼中註冊bean之前,會對bean的name做一個判斷,如果bean的name是重複的,spring則會報錯誤,所以我們如果想不讓spring報錯,則需要讓生成的bean的name爲“package+name”這種形式。我們繼續看,生成bean的name的方法爲
beanNameGenerator.generateBeanName(candidate, this.registry);
此方法有兩個實現類
DefaultBeanNameGenerator AnnotationBeanNameGenerator
這兩個實現類就決定了生成的bean的name是“name”or“package+name”的命名方式。
-
解決方法
spring默認的使用實現方法是“AnnotationBeanNameGenerator”,所以生成的bean的name是不加package的;
我們要做的就是讓spring去實現“DefaultBeanNameGenerator”從而生成的bean的name爲“package+name” ;
這個時候我們就需要手動寫一個實現類去實現“DefaultBeanNameGenerator”,然後讓啓動類去掃描這個實現類,從而讓實現類起作用生成bean的name爲“package+name”。public class UniqueNameGenerator extends AnnotationBeanNameGenerator { @Override public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { //全限定類名 String beanName = definition.getBeanClassName(); return beanName; } }
然後在啓動類上加上啓動掃描
@SpringBootApplication @ComponentScan(nameGenerator = UniqueNameGenerator.class) public class MedicalServerApplication { public static void main(String[] args) { SpringApplication.run(MedicalServerApplication.class, args); } }
然後便可以啓動不報錯
springboot項目不同package下擁有相同命名的class,導致啓動報錯的解決方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.