-
错误的原因
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,导致启动报错的解决方法
猜你喜欢
转载自blog.csdn.net/weixin_45121502/article/details/105703025
今日推荐
周排行