J'utilise Spring pour définir les étapes de mon application. Il est configuré pour Configurator
injecter la classe nécessaire (appelée ici ) avec les étapes.
Maintenant, j'ai besoin de la liste des étapes d'une autre classe, nommée LoginBean
. Le Configurator
ne donne pas accès à sa liste d'étapes.
Je ne peux pas changer de classe Configurator
.
Mon idée:
définir un nouveau bean appelé Stages et l'injecter dans Configurator
et LoginBean
. Mon problème avec cette idée est que je ne sais pas comment transformer cette propriété:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
dans un haricot.
Quelque chose comme ça ne fonctionne pas:
<bean id="stages" class="java.util.ArrayList">
Quelqu'un peut-il m'aider avec ça?
<property name="beanList" ref="myList"/>
@Autwired
n'aide pas lors de l'injection d'une liste créée de cette façon. Cependant,@Resource
ça marche. soit@Resource List<String> myList
Voici une méthode:
la source
StageClass
déclarations de bean en<list>
évitant le besoin d'<ref>
éléments.Une autre option consiste à utiliser JavaConfig. En supposant que toutes les étapes sont déjà enregistrées comme haricots de printemps, il vous suffit de:
et le printemps les injectera automatiquement dans cette liste. Si vous devez préserver l'ordre (la solution supérieure ne le fait pas), vous pouvez le faire de cette façon:
L'autre solution pour conserver l'ordre est d'utiliser une
@Order
annotation sur les beans. La liste contiendra alors les beans classés par valeur d'annotation ascendante.la source
Et dans SomeClass:
la source
Stacker a posé une excellente réponse, j'irais plus loin pour le rendre plus dynamique et utiliser Spring 3 EL Expression.
J'essayais de comprendre comment je pouvais faire cela avec la liste util: mais je ne pouvais pas le faire fonctionner en raison d'erreurs de conversion.
la source
Je pense que vous cherchez peut-être
org.springframework.beans.factory.config.ListFactoryBean
.Vous déclarez une instance ListFactoryBean, en fournissant la liste à instancier en tant que propriété avec un
<list>
élément comme valeur, et donnez au bean unid
attribut. Ensuite, chaque fois que vous utilisez le déclaréid
commeref
ou similaire dans une autre déclaration de bean, une nouvelle copie de la liste est instanciée. Vous pouvez également spécifier laList
classe à utiliser.la source
définir ces beans (test1, test2) après :)
la source
Utilisez l'espace de noms util, vous pourrez enregistrer la liste en tant que bean dans votre contexte d'application. Vous pouvez ensuite réutiliser la liste pour l'injecter dans d'autres définitions de bean.
la source
En complément de la réponse de Jakub, si vous prévoyez d'utiliser JavaConfig, vous pouvez également câbler automatiquement de cette façon:
la source
Vous venez de supprimer
id
les haricots à l'intérieur de la<list>
balise. Comme ça:la source
Et voici comment injecter un ensemble dans une propriété au printemps:
la source
Injectez la liste des chaînes.
Supposons que vous ayez une classe de modèle Pays qui accepte une liste de chaînes comme ci-dessous.
Après la définition xml, définissez une liste de bean et inject de pays.
Lien de référence
Injecter la liste des Pojos
Supposons que vous ayez une classe de modèle comme ci-dessous.
Définitions du bean.
Lien de référence .
la source