Je viens de modifier la configuration de démarrage de printemps, et rencontré
@ConditionalOnProperty(prefix = "spring.social.", value = "auto-connection-views")
de 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");
}
Je ne comprends pas le but de cette annotation. Je suppose que cela pourrait permettre d’utiliser le bean uniquement s’il existe une valeur de propriété (par exemple, "spring.social", "auto-connection-views").
L'annotation est utilisée pour créer de manière conditionnelle un bean Spring en fonction de la configuration d'une propriété. Dans l'utilisation que vous avez montrée dans la question, le bean ne sera créé que si le spring.social.auto-connection-views
La propriété existe et a une valeur autre que false
. Cela signifie que, pour que ce bean View
soit créé, vous devez définir le paramètre spring.social.auto-connection-views
propriété et il doit avoir une valeur autre que false.
Vous pouvez trouver de nombreuses autres utilisations de cette annotation dans la base de code Spring Boot. Un autre exemple est:
@ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic", matchIfMissing = true)
public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
Notez l'utilisation de matchIfMissing
. Dans ce cas, le bean AmqpAdmin
sera créé si le spring.rabbitmq.dynamic
La propriété existe et a une valeur autre que false
o la propriété n'existe pas du tout. Cela rend la création du bean opt-out plutôt que l'exemple de la question qui est opt-in.
Si vous utilisez cette propriété au niveau TYPE, c'est-à-dire sur l'une de vos classes @Configuration ... Gardez à l'esprit que, dans ce cas, l'annotation est évaluée/vérifiée par rapport au fichier de propriétés par défaut, c'est-à-dire application.properties
C'est plutôt le contraire. Une condition préalable à la mise en œuvre de la méthode, si la propriété est définie dans l'environnement (développement, approbation, production) et que sa valeur est vraie avec la méthode peut être exécutée.
Si la propriété n'est pas définie dans l'environnement, l'annotation n'empêche pas l'exécution de la méthode.