Estou usando o Spring para definir estágios no meu aplicativo. Está configurado que a classe necessária (aqui chamada Configurator
) é injetada com os estágios.
Agora eu preciso da Lista de estágios em outra classe, chamadaLoginBean
. O Configurator
não oferece acesso à sua lista de estágios.
Eu não posso mudar de classe Configurator
.
Minha idéia:
defina um novo bean chamado Stages e injete-o no Configurator
e LoginBean
. Meu problema com essa idéia é que não sei como transformar essa propriedade:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
em um feijão.
Algo assim não funciona:
<bean id="stages" class="java.util.ArrayList">
Alguém pode me ajudar com isso?
<property name="beanList" ref="myList"/>
@Autwired
isso não ajuda ao injetar uma lista criada dessa maneira. No entanto,@Resource
funciona. ie@Resource List<String> myList
Aqui está um método:
fonte
StageClass
declarações do bean para<list>
evitar a necessidade dos<ref>
elementos.Outra opção é usar o JavaConfig. Supondo que todas as etapas já estejam registradas como beans primavera, você apenas precisa:
e a primavera os injetará automaticamente nesta lista. Se você precisar preservar a ordem (a solução superior não faz isso), é possível fazer da seguinte maneira:
A outra solução para preservar a ordem é usar uma
@Order
anotação nos beans. A lista conterá beans ordenados pelo valor da anotação crescente.fonte
E em SomeClass:
fonte
O Stacker ofereceu uma ótima resposta. Eu daria um passo adiante para torná-lo mais dinâmico e usar o Spring 3 EL Expression.
Eu estava tentando descobrir como eu poderia fazer isso com o util: list, mas não consegui fazê-lo funcionar devido a erros de conversão.
fonte
Eu acho que você pode estar procurando
org.springframework.beans.factory.config.ListFactoryBean
.Você declara uma instância ListFactoryBean, fornecendo a lista a ser instanciada como uma propriedade com um
<list>
elemento como seu valor eid
atribui um atributo ao bean . Então, cada vez que você usa o declaradoid
comoref
ou similar em alguma outra declaração de bean, uma nova cópia da lista é instanciada. Você também pode especificar aList
classe a ser usada.fonte
defina esses beans (test1, test2) depois :)
fonte
Use o namespace util, você poderá registrar a lista como um bean em seu contexto de aplicativo. Você pode reutilizar a lista para injetá-la em outras definições de bean.
fonte
Como complemento à resposta de Jakub, se você planeja usar o JavaConfig, também é possível conectar automaticamente dessa maneira:
fonte
Você acabou de remover
id
a<list>
tag dentro dos grãos . Como isso:fonte
E é assim que injetar o conjunto em alguma propriedade no Spring:
fonte
Injetar lista de strings.
Suponha que você tenha uma classe de modelo de países que faça uma lista de cadeias de caracteres como abaixo.
Após a definição xml, defina um bean e injete uma lista de países.
Link de referência
Injetar lista de Pojos
Suponha que você tenha uma classe de modelo como abaixo.
Definições de Bean.
Link de referência .
fonte