@ConditionalOnProperty:仅对下面指定的注释有影响吗?

问题描述 投票:0回答:3

假设我们有以下和平的代码:

@SpringBootApplication
@ConditionalOnProperty(value = "scheduling.enable")
@EnableScheduling
@EnableCaching
public class AcmeServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(AcmeServiceApplication.class, args);
    }
}

@ConditionalOnProperty
注释是否只会启用\禁用
@EnableScheduling
还是也会对
@EnableCaching
产生影响?

在文档中没有找到答案。

java spring spring-boot annotations
3个回答
3
投票

@ConditionalOnProperty
上的
@SpringBootApplication
没有任何意义,不会被处理。无论
scheduling.enable
财产是否存在,
@EnableScheduling
@EnableCaching
都将适用。

正如 Andy Wilkinson 所解释的那样,

@ConditionalOnProperty
@Configuration
@Bean
目标的目标。
@SpringBootApplication
完全是另一回事。


2
投票

当在类上使用条件(例如

@ConditionalOnProperty
)时,它控制是否处理整个类。当它用于
@Bean
方法时,它控制是否处理单个方法。

在您的具体示例中,如果条件匹配,将处理

AcmeServiceApplication
,因此将启用计划和缓存,并且
@SpringBootApplication
将通过启用自动配置和组件扫描来生效。如果条件不匹配,
AcmeServiceApplication
将不会被处理,因此调度和缓存都不会启用,
@SpringBootApplication
将不起作用。


0
投票

我有类似的问题,

@EnableCaching
@ConditionalOnProperty
的组合不起作用,
@EnableCaching
始终处于活动状态,无论条件属性是否禁用
@Configuration

© www.soinside.com 2019 - 2024. All rights reserved.