你已經在使用該組件的Classpath掃描假設,那麼你可以給一個明確的名稱到組件,而不是讓春自動生成一個名字你:
@Service("myService")
public class MyService {
...
}
我還沒有測試過這個,但我相信是這樣。
編輯:挖掘一下後,確定bean名稱的邏輯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);
}
換句話說,它試圖從得到一個明確的bean名稱註釋(S)和做不到這一點,它使用默認:
protected String buildDefaultBeanName(BeanDefinition definition) {
String shortClassName = ClassUtils.getShortName(definition.getBeanClassName());
return Introspector.decapitalize(shortClassName);
}
所以,是的,名爲的註解類210,自動生成的bean名稱的確應該是myService
,所以你的代碼應該可以工作。
出於好奇,當您使用@Component
而不是@Service
會發生什麼?
我已經得到的東西工作,但我不完全確定如何,我將不得不多花一點時間調查,但我會回到這個並選擇並很快回答 – walnutmon 2010-06-24 13:42:38