【问题标题】:How do I exclude all @Component classes except for one under @ComponentScan?如何排除除@ComponentScan 下的一个之外的所有@Component 类?
【发布时间】:2016-08-02 14:01:26
【问题描述】:

我的代码中有以下注释:

@ComponentScan(basePackageClasses={MyClass.class},
            excludeFilters={@Filter(Component.class)}, //@Component
            includeFilters={@Filter(type=ASSIGNABLE_TYPE, classes=MyClass.class)}
        )

MyClass 使用@Component 进行注释,但仍希望在组件扫描期间包含它。但是,组件扫描过滤器似乎使用 and 逻辑而不是 or。如何实现我想做的事情?

【问题讨论】:

  • 添加 use-default-filters=false 并且仅包含。
  • +1 @M.Deinum。详细讨论见此链接:stackoverflow.com/questions/3710444/…
  • @M.Deinum 您能否将您的评论变成答案,以便我接受。还要提到@ComponentScan下有useDefaultFilters属性。
  • 这是一个愚蠢的问题,但如果你只包含一个类,为什么要使用@ComponentScan
  • @MilošMilivojević 因为它实际上不仅仅是一个包中的一个类。这只是实际问题的一个横截面。

标签: java spring spring-boot spring-java-config


【解决方案1】:

@Configuration 在所有情况下都比@ComponentScan 更具确定性。

而不是解决@ComponentScan 注释。您应该尝试在@Configuration 类中将您的MyClass.class 明确列为@Bean,例如:

@Configuration
public class MyClassConfiguraiton {

    @Bean
    public MyClass myClass() {
        return new MyClass();
    }
}

然后@Import显式配置类而不是@ComponentScan注解:

@Import(MyClassConfiguratrion.class)

或者通过组件扫描机制导入它(因为@Configuration是用@Component进行元注释的)。

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多