@ConditionalOnProperty注释的目的是什么?


73

我刚刚修改了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");
}

我不了解此注释的目的。我猜想只有在属性值存在的情况下(例如“ spring.social”,“ auto-connection-views”),才可以使用bean。

Answers:


126

注释用于根据属性的配置有条件地创建Spring bean。在问题中所显示的用法中,只有在spring.social.auto-connection-views属性存在且其值不是时,才会创建Bean false。这意味着,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,而不要选择问题中的示例。



0

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

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


我认为您已经以一种令人困惑的方式表达了这一点。我猜英语不是您的自然语言(Pt?)。我使用Google翻译,并通过翻译将第一个结果反馈回去。如果是垃圾,我会简化原件并重试,直到可以重新出现。还可以请您提供一个示例,以运行您提到的不同环境吗?
比尔·伍德格

你是对的。我是巴西人,写作技巧也不好。
安德森·马克斯,2014年

如果您不了解,这可能会让您感兴趣。pt.stackoverflow.com。那里只有几个大型机问题,但您也有其他经验。我的葡萄牙语很烂,所以我使用Google翻译,并从那里的好人那里得到了很多帮助。
比尔·伍德格

有了这个问题,如果您可以提供一个简短的代码示例来说明您的意思,那么我可以编辑文本。
比尔·伍德格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.