スプリングブート構成を変更したところ、
@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")。
注釈は、プロパティの構成に応じて、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
プロパティが存在し、AmqpAdmin
以外の値を持つ場合、false
Beanが作成されますまたはプロパティはまったく存在しません。これにより、オプトインである質問の例ではなく、Beanのオプトアウトが作成されます。
TYPEレベル、つまり@Configurationクラスのいずれかでこのプロパティを使用している場合...このような場合、アノテーションはデフォルトのプロパティファイル、つまりapplication.properties
に対して評価/チェックされることに注意してください。
むしろ、反対です。プロパティが環境(開発、承認、生産)で設定され、メソッドで真の値である場合、メソッドを実装するための前提条件を実行できます。
プロパティが環境アノテーションで設定されていない場合、メソッドの実行は妨げられません。