@ConditionalOnProperty注释的目的是什么?

时间:2014-10-16 01:23:35

标签: spring annotations spring-boot

我刚修改了spring boot配置,遇到了

@ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-views") 

来自org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration

@Bean(name = { "connect/twitterConnect", "connect/twitterConnected" })
@ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-views")
public View twitterConnectView() {
    return new GenericConnectionStatusView("twitter", "Twitter");
}

我不明白这个注释的目的。我想这可能只有在存在属性值时才能使用bean(例如“spring.social”,“auto-connection-views”)。

3 个答案:

答案 0 :(得分:92)

注释用于根据属性的配置有条件地创建Spring bean。在您在问题中显示的用法中,只有spring.social.auto-connection-views属性存在并且其值不是false时才会创建bean。这意味着,要创建此View bean,您需要设置spring.social.auto-connection-views属性,并且它必须具有false以外的值。

您可以在Spring Boot代码库中找到此批注的许多其他用法。另一个例子是:

@ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic", matchIfMissing = true)
public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) {
    return new RabbitAdmin(connectionFactory);
}

请注意matchIfMissing的使用。在这种情况下,如果AmqpAdmin属性存在并且其值不是spring.rabbitmq.dynamic ,则将创建false bean,该属性不存在于所有。这使得bean选择退出而不是选择加入的问题中的示例。

答案 1 :(得分:3)

如果您在TYPE级别使用此属性,即在您的某个@Configuration类上使用...请记住,在这种情况下,将针对默认属性文件评估/检查注释,即{{1} }

@ConditionalOnProperty on TYPE level w/ @Configuration

答案 2 :(得分:0)

相反,它恰恰相反。如果在环境中设置属性(开发,批准,生产)并且该方法的值是真值,则可以执行实现该方法的前提条件。

如果未在环境中设置属性,则注释不会阻止执行该方法。

相关问题