Come definire un bean di elenco in spring?

Sto usando Spring per definire le fasi nella mia applicazione. E ‘configurato che la class necessaria (qui chiamata Configurator ) viene iniettata con le fasi.
Ora ho bisogno dell’elenco delle fasi in un’altra class, denominato LoginBean . Il Configurator non offre accesso al suo elenco di fasi.

Non riesco a cambiare il Configurator class.

La mia idea:
Definisci un nuovo bean chiamato Stages e inseriscilo in Configurator e LoginBean . Il mio problema con questa idea è che non so come trasformare questa proprietà:

   ... ... ...   

in un fagiolo.

Qualcosa di simile non funziona:

  

Qualcuno può aiutarmi con questo?

Importa lo spazio dei nomi di Spring util. Quindi puoi definire un bean di lista come segue:

 < ?xml version="1.0" encoding="UTF-8"?>   foo bar  

Il tipo-valore è il tipo generico da utilizzare ed è facoltativo. È inoltre ansible specificare la class di implementazione dell’elenco utilizzando l’attributo list-class .

Ecco un metodo:

           

Un’altra opzione è usare JavaConfig. Supponendo che tutti gli stadi siano già registrati come fagioli primaverili devi solo:

 @Autowired private List stages; 

e la molla le inietterà automaticamente in questa lista. Se hai bisogno di conservare l’ordine (la soluzione superiore non lo fa) puoi farlo in questo modo:

 @Configuration public class MyConfiguration { @Autowired private Stage1 stage1; @Autowired private Stage2 stage2; @Bean public List stages() { return Lists.newArrayList(stage1, stage2); } } 

L’altra soluzione per preservare l’ordine è usare un’annotazione @Order su bean. Quindi l’elenco conterrà i fagioli ordinati in base al valore di annotazione crescente.

 @Bean @Order(1) public Stage stage1() { return new Stage1(); } @Bean @Order(2) public Stage stage2() { return new Stage2(); } 
          

E in SomeClass:

 class SomeClass { private List myList; @Required public void setMyList(List myList) { this.myList = myList; } } 

Stacker ha rappresentato un’ottima risposta, farei un ulteriore passo avanti per renderlo più dinamico e usare Spring 3 EL Expression.

   #{springDAOBean.getGenericListFoo()}   

Stavo cercando di capire come avrei potuto farlo con l’util: list ma non riuscivo a farlo funzionare a causa di errori di conversione.

Penso che tu stia cercando org.springframework.beans.factory.config.ListFactoryBean .

Dichiarate un’istanza ListFactoryBean, fornendo all’istanza un’istanza come una proprietà con un elemento come valore e assegnando al bean un attributo id . Quindi, ogni volta che si utilizza l’ id dichiarato come riferimento o simile in un’altra dichiarazione di bean, viene creata un’istanza di una nuova copia dell’elenco. È anche ansible specificare la class List da utilizzare.

Utilizza lo spazio dei nomi util, sarai in grado di registrare l’elenco come bean nel contesto dell’applicazione. È quindi ansible riutilizzare l’elenco per iniettarlo in altre definizioni di bean.

In aggiunta alla risposta di Jakub, se prevedi di utilizzare JavaConfig, puoi anche farlo in questo modo:

 import com.google.common.collect.Lists; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; < ...> @Configuration public class MyConfiguration { @Bean public List stages(final Stage1 stage1, final Stage2 stage2) { return Lists.newArrayList(stage1, stage2); } } 

E questo è come iniettare un set in qualche proprietà in spring:

          
            

definire quei fagioli (test1, test2) in seguito 🙂