Quel est le but de @ConditionalOnProperty annotation?

je viens de modifier la configuration du démarrage à ressort, et j'ai rencontré

@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");
}

je ne comprends pas le but de cette annotation. Je suppose que cela pourrait être permis d'utiliser la fève seulement si la valeur de la propriété existe (par exemple " ressort.sociale", "l'auto-connexion-vues").

41
demandé sur vegemite4me 2014-10-16 05:23:34

3 réponses

l'annotation est utilisée pour créer conditionnellement un grain de printemps en fonction de la configuration d'une propriété. Dans l'usage que vous avez montré dans la question la fève ne sera créée que si le spring.social.auto-connection-views la propriété existe et a une valeur autre que false. Cela signifie que, pour ce View haricot d'être créé, vous devez définir l' 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 tout au long de la botte de printemps base de code. Un autre exemple est la suivante:

@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 AmqpAdmin bean sera créé si le spring.rabbitmq.dynamic propriété existe et a une valeur autre que false ou la propriété n'existe pas du tout. Cela rend la création de la fève opt-out plutôt que l'exemple de la question de l'opt-in.

73
répondu Andy Wilkinson 2014-10-16 11:21:03

dans le cas où vous utilisez cette propriété au niveau du 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, i.e. application.properties

@ConditionalOnProperty sur le TYPE de niveau w/ @Configuration

2
répondu Jaroslav Záruba 2017-12-08 15:46:05

c'est Plutôt le contraire. Une condition préalable à la mise en œuvre de la méthode, si la propriété est fixée dans l'Environnement (Développement, approbation, production) et est la vraie valeur avec la méthode peut être exécutée.

Si la propriété n'est pas définie dans l'environnement d'annotation pas empêché l'exécution de la méthode.

0
répondu Anderson Marques 2014-10-16 01:29:49