spring同名bean加载冲突,spring bean 冲突
目录
springboot生成的bean名称冲突问题描述解决方案问题自定义bean对象名称问题
springboot生成bean名称冲突
00-1010当我们再次使用springboot时,不同的文件目录中可能会出现同名的java类。此时,将会报告一个bean名称冲突错误。
首先,我们来了解一下springboot是如何生成bean名称的。
当组件、存储库、服务、控制器注释的值树未定制时,将根据类名生成一个短bean名称。示例:com . XYZ . fooserviceimpl-fooserviceimpl
也就是说,路径会被忽略,会生成首字母小写的bean名称。那么,以上哪种情况会导致冲突呢?
但是由于我们平时的编码习惯,几乎都避免了这个同名文件的存在,所以从来没有遇到过这个错误。
00-1010使用自定义AnnotationBeanNameGenerator
@ spring boot application @ rest controller @ components can(name generator=databases application。spring bean name generator . class)public class databases application { public static class spring bean name generator extends AnnotationBeanNameGenerator { @ Override protected String buildD efaultBeanName(bean definition){ return definition . getbean class name();} } public static void main(String[]args){ spring application . run(databases application . class,args);} @GetMapping(/hello )公共字符串hello(){ return hello databases!;}}我在做springboot实现多个数据源,还有一个地方可以用。
用于MapperScan批注
@ mapper scan(base packages= com . databases . databases . Dao . one ,sqlSessionFactoryRef= onesql session factory ,name generator=databases application。SpringBeanNameGenerator.class)
00-1010当已经有对象时,在设置要加载的bean时,注意不要有相同的名称。
否则,它不会启动,并且会提示您将spring . main . allow-bean-definition-overriding=true添加到配置文件中。这意味着当有一个同名的bean时,它将覆盖前一个。不推荐。毕竟,每个bean对象都是唯一的。
以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。