背景

因为项目越来越臃肿,需要对项目进行拆包处理。

问题

在拆完包后,发现报了个“defined in BeanDefinition defined in class path resource [XXX], could not be registered. A bean with that name has already been defined in class path resource”的错误。

这个错误的意思就是当前名称的bean已经注册了。因为有些公共的包里面有对应的一些bean。所以如果在引用这些公共的包的时候,如果命名了同名的bean就会报这个问题。

因为在spring中被spring管理的bean必须唯一。

重名的话,在引用的时候,spring就不知道该怎么处理了。

解决

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

这个是给出的解决方法。(看到英文千万不能慌)

意思是给出了两个解决方案。

renaming one of the beans

重命名其中一个重复的bean。

这个就是直接找到bean的文件名,在@Bean注解中设置直指定的名称。

@Bean(name="CCC")

enabling overriding

允许Spring执行覆盖操作。

覆写操作,就是在配置文件中,添加spring.main.allow-bean-definition-overriding=true

如果是yaml文件,格式如下:

spring:
  main:
    allow-bean-definition-overriding: true

再去试下代码,你发现应该OK了。
 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐