web-dev-qa-db-fra.com

Inclusion de la définition du bean lorsqu'un profil n'est PAS actif

Dans mon application, j'utilise plusieurs profils pour rendre certains beans éligibles au câblage automatique. Ce qui me manque, c'est la possibilité de rendre un bean éligible pour le câblage automatique lorsqu'un certain profil n'est PAS actif.

La meilleure façon de le faire à laquelle j'ai pensé est la suivante:

  1. Supposons que nous ayons une liste de tous les profils possibles, par exemple {A B C D}.
  2. Les profils actifs pour une exécution particulière sont {A, C}.
  3. Ce que je fais, c'est que je crée des profils artificiels pour tous les profils possibles qui ne sont pas actifs. Dans l'exemple, je créerais des profils {not_B, not_D}.
  4. Les beans que je veux être actifs en fonction du profil non actif X Je rends actif pour le profil not_X. Dans mon cas, si je voulais qu'un bean soit éligible pour le câblage automatique lorsque le profil B n'est pas actif, je les annoterais @Profile("not_B")

Cette solution nécessite cependant une connaissance préalable de tous les profils possibles.

Pouvez-vous penser à une meilleure solution?

48
ShyJ

Vous pouvez utiliser un opérateur not (!) ... mais vous devez utiliser Spring 3.2 M1.

La syntaxe suivante est désormais prise en charge

<beans profile="A,!B">

@Profile("A", "!B")

indiquant que l'élément ou le composant annoté ne doit être traité que si le profil "A" est actif ou le profil "B" n'est pas actif.

Voir le changement annoncé ici: Spring Framework 3.2 M1 publié
La validation est sur GitHub: Supporte pas (!) L'opérateur pour la sélection de profil
Problème dans JIRA: SPR-8728

Si la mise à niveau vers Spring 3.2 n'est pas possible pour votre projet, je vous recommande de ne pas utiliser le @Profile approche et s'assurer que le bean n'est pas créé dans votre configuration Spring.

62
aweigold