Spring中默认bean名称的生成策略/方式修改
来源:互联网 发布:php开源报表系统 编辑:程序博客网 时间:2024/06/07 06:11
Spring中默认bean名称的生成策略/方式修改
最近公司项目打算模块化,其实一个原因也是为了能够整合公司多个业务的代码,比如一个资源xxx,两个业务中都有对这个资源的管理,虽然是一个资源,但是是完全不同的定义、完全不同的表、不同的处理逻辑。所以打算把类名弄成一样的,但是包名不一样。
这里就遇到一个问题,就是在使用注解的时候,两个模块里的这个资源都叫xxxDao,这样在spring启动的时候就会报错。错误如下conflicts with existing, non-compatible bean definition of same name and class [xxxxDao]什么的,意思就是说两个bean同名了,这样启动就报错了。
解决方法只能咱们自己手动修改bean名称的生成策略了,我这里直接就是用他的实现类的全限定名称(com.abc.dao.impl.xxxDaoImpl)来作为bean的名称了。
AnnotationBeanNameGenerator是spring的默认生成策略,我们看一眼源码,其中buildDefaultBeanName方法是生成名称的实现,具体如下:
String shortClassName = ClassUtils.getShortName(definition.getBeanClassName());
return Introspector.decapitalize(shortClassName);
这个默认的生成策略大家应该知道是怎么生成的了,我就不细说了。
这里definition.getBeanClassName()是获取全限定名称的,ClassUtils.getShortName是获取类名的,下面的Introspector.decapitalize实际上就是把首字母变小写的。
我们这里要设置为全限定名称,我们可以新写一个类,假设叫xxx,然后继承AnnotationBeanNameGenerator之后重写buildDefaultBeanName方法,返回definition.getBeanClassName(),这样我们这个生成策略就写好了。
接下来是需要在spring里面配置一下。打开applicationContext.xml文件,找到我们配置context:component-scan这块,增加一个参数name-generator=我们新写的类的全限定名称即可。
这时候所有bean的默认名称就是我们设置的了,不过如果我们在类上显式的写了bean的id的话,还是会用我们自定义的bean的name的。
- Spring中默认bean名称的生成策略/方式修改
- 修改Android Studio Build生成apk的默认名称
- 修改Android Studio Build生成apk的默认名称
- VS2010中修改生成程序的名称
- Spring--IoC--Bean的装配--默认装配方式
- Spring中Bean的生成过程
- Spring中Bean的生成过程
- spring中实例化bean的方式
- Spring中bean的实例化方式
- Spring中获取bean的方式总结
- spring中bean配置的常用方式
- spring中bean的获取方式总结
- Spring中获取bean的方式总结
- Spring中获得bean的方式
- Spring中bean的注入方式
- Spring中获取bean的方式
- 修改apk的默认名称
- Spring中bean工厂创建bean的三种方式
- C#语法小知识(二十一)ref与out
- 136. Single Number
- Spring 4MVC 返回Java 8 时间JSON格式的数据
- 由A* = A^T推导问题
- POJ 1753 Flip Game (递归枚举)
- Spring中默认bean名称的生成策略/方式修改
- 程序猿常用网站
- php 文件上传后缀名与文件类型对照表
- jquery 通过相同id获取多个dom标签
- CF567C
- Linux下常用命令详解
- 再温排序
- 《深入探索C++对象模型》笔记:第1章 关于对象
- vmstat 的用法和判别系统瓶颈