我有一个包裹:
xxx.yyy.zzz {
SampleClass1.java
}
并打包两个:
xxx.yyy.zzz {
SampleClass2.java
}
并打包了三个:
aaa.bbb.ccc {
TopClass.java
}
在TopClass中,我正在使用组件扫描,因此可以从Package 2中加载类,因为我要@Autowire SampleClass2.java。但是,使用组件扫描,由于它们具有相同的程序包名称,因此它尝试引入SampleClass1.java。这样做时,由于我不需要的SampleClass1导致了很多错误,因此需要满足其他依赖项Bean。
如何在不面对SampleClass1.java冲突的情况下@Autowire SampleClass2.java?
答案 0 :(得分:3)
根据我的理解,不能有两个名称相同的包,而不能是两个类的相同包。 因此,您的包和类的结构如下:
xxx.yyy.zzz{
SampleClass2.java,
SampleClass1.java
}
意味着在包装上使用组件扫描时,将同时加载两个类。 如果是这种情况,那么:
SampleClass1.java
删除为一个组件,但这意味着您无法在需要的地方自动装配SampleClass1.java
。答案 1 :(得分:1)
我的意思是程序包头相同,这引起了一个问题:
IE位于文件顶部:
package xxx.yyy.zzz;
我能够这样解决问题:
@ComponentScan(basePackageClasses =
{
SampleClass2.class,
},
useDefaultFilters = false,
includeFilters = {@ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
value = {
SampleClass2.class,
})
})
这种类型的组件扫描严格采用了必要的类,而没有其他依赖项。