如何忽略spring.factories中定义的ApplicationListener?

时间:2017-08-01 18:48:36

标签: java spring-boot

我正在我的项目中导入一个Spring Boot Starter,因为它包含一个我想要使用的类,但我不希望自动配置运行。我可以在启动器中看到有一个META-INF/spring.factories文件同时具有自动配置和应用程序侦听器。

# Auto Configurations
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.demo.SomeAutoConfiguration,\
    org.demo.AnotherAutoConfiguration

# Application Listeners
org.springframework.context.ApplicationListener=\
    org.demo.SomeApplicationListener,\
    org.demo.AnotherApplicationListener

我已经想出如何从自动配置中排除特定的类,这很有用。

@SpringBootApplication(exclude={SomeAutoConfiguration.class, AnotherAutoConfiguration.class})

现在我似乎无法弄清楚如何排除这些应用程序监听器中的一个或多个。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

没有内置支持忽略某些应用程序侦听器。 但是,您可以继承SpringApplication,覆盖SpringApplication.setListeners(Collection<? extends ApplicationListener<?>>)并过滤掉您不需要的侦听器:

    new SpringApplication(ExampleApplication.class) {

        @Override
        public void setListeners(Collection<? extends ApplicationListener<?>> listeners) {
            super.setListeners(listeners
                    .stream()
                    .filter((listener) -> !(listener instanceof UnwantedListener))
                    .collect(Collectors.toList()));
        }

    }.run(args);