Optionnel Printemps bean références
Dans mon application j'utilise ContextLoaderListener pour charger contexte fichiers à partir de plusieurs pots à l'aide de:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/contextBeans.xml</param-value>
</context-param>
Cela signifie que je peut faire référence à des haricots provenant d'autres pots sans faire l'importation.
Dans l'application il y a plusieurs options de déploiement, et dans certains déploiements, les pots peuvent être exclus. À l'appui que je tiens un peu de fève de références en option. Par exemple:
<bean id="mainAppBean" class="com.someapp.MyApplication">
<constructor-arg index="0" ref="localBean"/>
<constructor-arg index="1" ref="optionalBeanReference1"/>
<constructor-arg index="2" ref="optionalBeanReference2"/>
</bean>
Dans l'exemple ci-dessus, je voudrais avoir optionalBeanReference1 l'égalité de la valeur null si la référence n'a pas été trouvé (il marque en option, d'une certaine façon)
Cela peut-il être fait au Printemps? ou quelle méthode préconisez-vous pour la manipulation dynamique des références?
OriginalL'auteur mbdev | 2010-10-18
Vous devez vous connecter pour publier un commentaire.
Je pense que @cristian @Autocâblés réponse est bonne. Qui va appeler le setter si les fèves de ce type sont disponibles. Toutefois, si vous avez plusieurs de haricots du même type, je crois que le Printemps déclenche une exception. Si vous ne pouvez pas utiliser @Autocâblés pour l'un ou pour quelque autre motif, je vois un couple de solutions:
Vous pourriez faire de votre classe
ApplicationContextAware
de choix et les haricots dans le contexte de vous-même:Vous pourriez inverser la dépendance. Chacun des cours optionnels qui pourrait définir eux-mêmes sur le mainAppBean. - Je l'utiliser dans certaines situations quand une dépendance directe serait la cause de boucles ou d'autres problèmes.
Puis dans le SomeClass:
Vous pourriez rester avec votre dépendance directe et ensuite importer un fichier avec les haricots défini ou d'importer un autre fichier qui permet de définir les haricots comme ayant des valeurs null à l'aide d'un usine bean. Voir ce code usine.
Bonne chance.
OriginalL'auteur Gray
Ma meilleure supposition est d'utiliser autowire-ing requis faux. Ne sais pas comment vous l'exprimer dans le langage XML, mais à l'aide de l'annotation de configuration, il ressemblerait à:
Ça a l'air bien mais je suis incapable d'utiliser le Printemps des annotations dans le projet pour l'instant.
OriginalL'auteur Cristian Vrabie
Avec les versions récentes de Printemps (testé avec le printemps 4.1) et de Configuration Java et Java 8, vous pouvez utiliser l'Option dans les paramètres, et ne sont autocâblés si disponible.
c'est la meilleure solution! Il fonctionne! Merci!
OriginalL'auteur aseychell
Étant donné que le haricot références dans votre configuration XML sont définis par l'intermédiaire de langage d'expression (EL) vous pouvez effectuer les opérations suivantes:
ce qui rend l'utilisation de la
BeanExpressionContext.getObject()
méthode. Voir ici pour plus de détails.OriginalL'auteur Brian Agnew
Il n'y a pas de mécanisme intégré pour cela. Cependant, vous pourriez écrire un assez trivial
FactoryBean
mise en œuvre pour le faire pour vous, quelque chose comme ceci:Vous pouvez alors l'utiliser comme ceci:
OriginalL'auteur skaffman