@ConditionalOnProperty 注释的目的是啥?
Posted
技术标签:
【中文标题】@ConditionalOnProperty 注释的目的是啥?【英文标题】:What is purpose of @ConditionalOnProperty annotation?@ConditionalOnProperty 注释的目的是什么? 【发布时间】:2014-12-11 06:02:56 【问题描述】:刚刚修改了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”)。
【问题讨论】:
【参考方案1】:注解用于根据属性的配置有条件地创建 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
的使用。在这种情况下,如果spring.rabbitmq.dynamic
属性存在并且具有除false
以外的值或该属性根本不存在,则将创建AmqpAdmin
bean。这使得 bean 的创建选择退出,而不是问题中选择加入的示例。
【讨论】:
【参考方案2】:如果您在 TYPE 级别使用此属性,即在您的 @Configuration 类之一上...请记住,在这种情况下,注释会根据默认属性文件进行评估/检查,即 application.properties
@ConditionalOnProperty on TYPE level w/ @Configuration
【讨论】:
【参考方案3】:恰恰相反。实现该方法的前提条件是,如果该属性在环境中设置(开发、批准、生产)并且是该方法的真值,则可以执行该属性。
如果没有在环境注解中设置属性,则不会阻止方法的执行。
【讨论】:
我认为您以一种令人困惑的方式表达了这一点。我猜英语不是你的自然语言(Pt?)。我使用谷歌翻译,并通过翻译反馈第一个结果。如果是垃圾,我会简化原件并重试,直到再次出现OK。您能否提供一个用于运行您提到的不同环境的示例? 你是对的。我是巴西人,不擅长写作。 如果您不了解它,您可能会对它感兴趣。 pt.***.com。那里只有几个大型机问题,但您也有其他经验。我的葡萄牙语很烂,所以我使用谷歌翻译并从那里的好人那里得到了很多帮助。 有了这个问题,如果你能提供一个简短的代码示例来说明你的意思,我可以编辑文本。以上是关于@ConditionalOnProperty 注释的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Spring ConditionalOnProperty 用于外部属性
@RefreshScope 和 @ConditionalOnProperty 不起作用