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的。

本文原创于赵伊凡BLOG

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: Spring中默认bean名称的生成策略/方式修改

“Spring中默认bean名称的生成策略/方式修改”的35个回复

  1. Pingback: Blue Coaster33
  2. Pingback: free movie downloads
  3. Pingback: watch movies online
  4. Pingback: tvpackages.net
  5. Pingback: lan penge nu
  6. Pingback: car parking
  7. Pingback: xnxx
  8. Pingback: stop parking
  9. Pingback: water ionizers
  10. Pingback: Instagram likes kopen
  11. Pingback: water ionizer plans
  12. Pingback: alkaline water brands
  13. Pingback: visite site
  14. Pingback: electrician mate navy
  15. Pingback: click reference
  16. Pingback: j stein locksmith
  17. Pingback: plumbing supplies uk
  18. Pingback: house blue
  19. Pingback: additional reading
  20. Pingback: best minecraft maps
  21. Pingback: water ionizer
  22. Pingback: electricity
  23. Pingback: alkaline water
  24. Pingback: click here
  25. Pingback: alkaline water
  26. Pingback: he has a good point
  27. Pingback: read more

发表评论

电子邮件地址不会被公开。 必填项已用*标注