运行spring启动项目时bean名称冲突

时间:2018-05-12 08:50:12

标签: java spring spring-boot exception

背景:我正在一个名为ObjectMapper的项目中工作。我有两个其他包com.x.myprojectcom.x.document的依赖关系。这两个包具有名称为com.x.library的相同类。

现在,在我的项目中,我必须扫描内部扫描QueueHelper的另一个包com.x.security,类似于:

com.x

在com.x.myproject

@SpringBootApplication
@ComponentScan(basePackages = {"com.x"})
@EnableCaching
public class Security {
.......
}

当我在@SpringBootApplication @ComponentScan(basePackages = {"com.x.myproject","com.x.security"}, excludeFilters={ @ComponentScan.Filter(type=FilterType.REGEX, pattern="com.x.document.*"), @ComponentScan.Filter(type=FilterType.REGEX, pattern="com.x.library.*")}) public class MyProject{ ....... } 中使用excludefilters但我想在com.x.security

中使用它时一切正常

我得到的例外

com.x.myproject

1 个答案:

答案 0 :(得分:3)

我想到了三个答案:

  1. 通过com.x.library.utils.QueueHelper注释为com.x.document.utils.QueueHelper@Component添加不同的名称。 Spring默认使用简单的类名来命名bean。您可以使用@Component('libraryQueueHelper')注释一个,使用@Component('documentQueueHelper')注释另一个。但是,现在你必须在你自动装配这些bean的每个地方都给@Qualifier(<name>)

  2. 在您的模块中排除它们,就像在问题中一样,然后使用@Bean中的@Configuration注释方法更改其名称。在第三个模块中使用时,您需要使用@Qualifier自动装配正确的bean。

  3. 重命名类。这是这种情况下的最佳解决方案,但既然你问了这个问题,我想这不可行。