Предполагая, что вы уже используете сканирование пути к классам компонентов, вы можете дать явное имя компоненту, а не позволять Spring автоматически генерировать для вас имя:
@Service("myService")
public class MyService {
...
}
Я не проверял это, но я верю, что это так.
edit : После небольшого копания логика для определения имени компонента находится в AnnotationBeanNameGenerator.generateBeanName()
.:
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
if (definition instanceof AnnotatedBeanDefinition) {
String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition);
if (StringUtils.hasText(beanName)) {
// Explicit bean name found.
return beanName;
}
}
// Fallback: generate a unique default bean name.
return buildDefaultBeanName(definition);
}
Другими словами, он пытается получить явное имя бина из аннотаций и, в случае неудачи, использует значение по умолчанию:
protected String buildDefaultBeanName(BeanDefinition definition) {
String shortClassName = ClassUtils.getShortName(definition.getBeanClassName());
return Introspector.decapitalize(shortClassName);
}
Так что да, для аннотированного класса с именем MyService
автоматически сгенерированное имя компонента должно быть действительно myService
, поэтому ваш код должен работать.
Из любопытства, что происходит, когда вы используете @Component
вместо @Service
?