首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用@ComponentScan排除名称相同的两个包中的一个?

如何使用@ComponentScan排除名称相同的两个包中的一个?
EN

Stack Overflow用户
提问于 2018-08-21 01:20:36
回答 2查看 328关注 0票数 0

我有第一包:

代码语言:javascript
复制
xxx.yyy.zzz {
 SampleClass1.java
}

第二组:

代码语言:javascript
复制
xxx.yyy.zzz {
 SampleClass2.java
}

第三包:

代码语言:javascript
复制
aaa.bbb.ccc {
 TopClass.java
}

在TopClass中,我使用组件扫描,这样就可以从包2加载类,因为我想要@Autowire SampleClass2.java。但是,使用组件扫描,它尝试引入SampleClass1.java,因为它们具有相同的包名。在执行此操作时,它会导致大量错误,因为SampleClass1 (我不需要这些错误)需要满足额外的依赖bean。

如何在不面临SampleClass1.java冲突的情况下@Autowire SampleClass2.java?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 18:39:06

我的意思是包头是相同的,这引起了一个问题:

(文件顶部的)

代码语言:javascript
复制
package xxx.yyy.zzz;

我能够这样解决这个问题:

代码语言:javascript
复制
@ComponentScan(basePackageClasses =
        {
                SampleClass2.class,
        },
        useDefaultFilters = false,
        includeFilters = {@ComponentScan.Filter(
                        type = FilterType.ASSIGNABLE_TYPE,
                        value = {
                                SampleClass2.class,
                        })
})

这种类型的组件扫描严格接受必要的类,而不考虑其他依赖项。

票数 1
EN

Stack Overflow用户

发布于 2018-08-21 01:43:16

根据我的理解,不可能有两个名称相同的包,而是有两个类的同一个包。因此,您的包和类的结构如下:

xxx.yyy.zzz{ SampleClass2.java, SampleClass1.java }

这意味着当您在包上使用组件扫描时,您将加载两个类。如果是这样的话:

  • 我建议你要么把它们分开放在另一个包裹里。或
  • 但是,将SampleClass1.java作为一个组件删除,这意味着您不能在需要它的地方自动生成SampleClass1.java
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51940381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档