Подтвердить что ты не робот

Какова цель аннотации @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 ").

4b9b3361

Ответ 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