Какова цель аннотации @ConditionalOnProperty?
Я только что изменил конфигурацию загрузки spring и столкнулся с
@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 в зависимости от конфигурации свойства. При использовании, которое вы указали в вопросе, bean будет создан, только если свойство spring.social.auto-connection-views
существует и имеет значение, отличное от false
. Это означает, что для создания View
bean необходимо установить свойство spring.social.auto-connection-views
, и оно должно иметь значение, отличное от false.
Вы можете найти множество других применений этой аннотации в базе Spring Boot code. Другой пример:
@ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic", matchIfMissing = true)
public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
Обратите внимание на использование matchIfMissing
. В этом случае AmqpAdmin
bean будет создан, если свойство spring.rabbitmq.dynamic
существует и имеет значение, отличное от false
, или свойство вообще не существует. Это делает невозможным отказ bean, а не пример в вопросе, который является отказом.
Ответ 2
Скорее наоборот. Предварительное условие для реализации метода, если свойство задано в среде (разработка, утверждение, производство) и является истинным значением с помощью метода, может быть выполнено.
Если свойство не задано в аннотации среды, это не препятствует выполнению метода.
Ответ 3
Если вы используете это свойство на уровне TYPE, то есть в одном из ваших классов @Configuration... Имейте в виду, что в этом случае аннотация обрабатывается/проверяется по отношению к файлу свойств по умолчанию, то есть application.properties
@ConditionalOnProperty на уровне TYPE с @Configuration