Sping中自定义默认注解名生成器
在类中贴上@Repository等标签,相当于在Spring容器里定义了一个Bean类,这个Bean的名称如果不指定名称,将默认使用当前类名(不含包名)的首字母小写作为Bean的名字.
需求:
要确保这个Bean名称要唯一,显然这样定义的Bean名称太过简单,比较容易造成一样情况,如果能使用全类名作为Bean可防止这样的情况,因为不存在全类名一样的类.例如:org.kirinsoft.frame.AClass
技术实现:
指定定义一个Bean名字生成器,实现Spring提供的BeanNameGenerator,在generateBeanName方法中设计出自己需要的Bean名称.
另外在Spring配置文件中的自动注解配置要指定名字生成器类,如:
<!-- 自动注解配置 --> <context:annotation-config /> <context:component-scan base-package="com.kirinsoft.frame" name-generator="com.kirinsoft.frame.pub.UniqueBeanNameGenerator" />
具体实现方法:
/** * 唯一Bean名称生成器.以类全名作为Bean名称. */ public class UniqueBeanNameGenerator implements BeanNameGenerator{ @Override public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { return definition.getBeanClassName(); } }