In a spring app , if two programmers develop two packages , annotating @Repository to the same class name , Spring will throw \"IllegalStateException\" :
This is because it is using AnnotationBeanNameGenerator
which simply put non-qualified name(class name) as the bean name, then caused conflict.
Two steps to resolve this:
1、You can implement your own bean name generation strategy which use fully-qualified name (package + class name) like below
public class UniqueNameGenerator extends AnnotationBeanNameGenerator {
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
//use fully-qualified name as beanName
String beanName = definition.getBeanClassName();
return beanName;
}
}
2、Add @ComponentScan(nameGenerator = UniqueNameGenerator.class)
to configuration or Boot class if you are using SpringBoot
@Configuration
@ComponentScan(nameGenerator = UniqueNameGenerator.class)
public class Config {
}