案例:
1)、源码
UserService.java
public interface UserService {}
UserServiceImpl.java
@Service
@Transactional
public class UserServiceImpl implements UserService {}
2)、上下文获取bean
系统注入bean时的默认名称是类名,首字符变成小写。
UserService userService = (UserService)xxx.getBean("userServiceImpl");
如果想修改bean名称,可通过如下方式:
1)、继承AnnotationBeanNameGenerator,重写generateBeanName生成器
public class CustomAnnotationBeanNameGenerator extends AnnotationBeanNameGenerator {
/**
* (non-Javadoc)
* @see org.springframework.context.annotation.AnnotationBeanNameGenerator#generateBeanName(org.springframework.beans.factory.config.BeanDefinition, org.springframework.beans.factory.support.BeanDefinitionRegistry)
*/
@Override
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
String beanName = super.generateBeanName(definition, registry);
return beanName.endsWith("Impl") ? beanName.substring(0, beanName.length() - 4) : beanName;
}
}
2)、增加sping.xml配置
<context:component-scan base-package="XXX.YYY.***.**" use-default-filters="false"
name-generator="XXX.YYY.ZZ.CustomAnnotationBeanNameGenerator">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
3)、上下文获取Bean
UserService userService = (UserService)xxx.getBean("userService");