Używam Springa do definiowania etapów w mojej aplikacji. Jest skonfigurowane, że niezbędna klasa (tutaj nazywana Configurator
) jest wstrzykiwana z etapami.
Teraz potrzebuję Listy Etapów w innej klasie, o nazwie LoginBean
. Configurator
Nie oferuje dostęp do swojej listy etapach.
Nie mogę zmienić klasy Configurator
.
Mój pomysł:
zdefiniuj nową fasolę o nazwie Etapy i wstrzyknij ją do Configurator
i LoginBean
. Mój problem z tym pomysłem polega na tym, że nie wiem, jak przekształcić tę właściwość:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
w fasolę.
Coś takiego nie działa:
<bean id="stages" class="java.util.ArrayList">
Czy ktoś może mi w tym pomóc?
<property name="beanList" ref="myList"/>
@Autwired
to nie pomaga, gdy wstrzykuje się listę utworzoną w ten sposób. Jednak@Resource
działa. tj.@Resource List<String> myList
Oto jedna metoda:
źródło
StageClass
deklaracje fasoli w celu<list>
uniknięcia potrzeby<ref>
elementów.Inną opcją jest użycie JavaConfig. Zakładając, że wszystkie etapy są już zarejestrowane jako fasolka szparagowa, wystarczy:
a wiosna automatycznie doda je do tej listy. Jeśli chcesz zachować porządek (górne rozwiązanie tego nie robi), możesz to zrobić w następujący sposób:
Innym rozwiązaniem dla zachowania porządku jest użycie
@Order
adnotacji na fasoli. Następnie lista będzie zawierać fasole uporządkowane według rosnącej wartości adnotacji.źródło
A w SomeClass:
źródło
Stacker przedstawił świetną odpowiedź. Chciałbym pójść o krok dalej, aby uczynić go bardziej dynamicznym i zastosować wyrażenie Spring 3 EL Expression.
Próbowałem wymyślić, jak mogę to zrobić za pomocą funkcji util: list, ale nie mogłem go uruchomić z powodu błędów konwersji.
źródło
Myślę, że możesz szukać
org.springframework.beans.factory.config.ListFactoryBean
.Deklarujesz instancję ListFactoryBean, podając listę, która ma być tworzona jako właściwość z
<list>
elementem jako jej wartość, i nadajesz fasoliid
atrybut. Następnie za każdym razem, gdy użyjesz deklarowanejid
jakoref
lub podobnej w jakiejś innej deklaracji komponentu bean, tworzona jest nowa kopia listy. Możesz także określićList
klasę, która ma być używana.źródło
następnie zdefiniuj te ziarna (test1, test2) :)
źródło
Korzystając z przestrzeni nazw util, będziesz mógł zarejestrować listę jako komponent bean w kontekście aplikacji. Następnie można ponownie użyć listy, aby wstrzyknąć ją do innych definicji komponentu bean.
źródło
Jako dodatek do odpowiedzi Jakuba, jeśli planujesz używać JavaConfig, możesz również automatycznie uruchomić w ten sposób:
źródło
Po prostu usuwasz
id
z fasoli wewnątrz<list>
tagu. Lubię to:źródło
Oto jak wstrzyknąć zestaw do jakiejś nieruchomości na wiosnę:
źródło
Wstaw listę ciągów znaków.
Załóżmy, że masz klasę modelu Kraje, która przyjmuje listę ciągów jak poniżej.
Zgodnie z definicją xml zdefiniuj listę fasoli i wstaw listę krajów.
Link referencyjny
Wstaw listę Pojos
Załóżmy, że masz klasę modelu jak poniżej.
Definicje fasoli.
Link referencyjny .
źródło