背景:我正在一个名为ObjectMapper
的项目中工作。我有两个其他包com.x.myproject
和com.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
答案 0 :(得分:3)
我想到了三个答案:
通过com.x.library.utils.QueueHelper
注释为com.x.document.utils.QueueHelper
和@Component
添加不同的名称。 Spring默认使用简单的类名来命名bean。您可以使用@Component('libraryQueueHelper')
注释一个,使用@Component('documentQueueHelper')
注释另一个。但是,现在你必须在你自动装配这些bean的每个地方都给@Qualifier(<name>)
。
在您的模块中排除它们,就像在问题中一样,然后使用@Bean
中的@Configuration
注释方法更改其名称。在第三个模块中使用时,您需要使用@Qualifier
自动装配正确的bean。
重命名类。这是这种情况下的最佳解决方案,但既然你问了这个问题,我想这不可行。