我刚修改了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”)。
答案 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} }
答案 2 :(得分:0)
如果未在环境中设置属性,则注释不会阻止执行该方法。