2011-08-16 10 views
8

Używam okablowanie adnotacji oparte (tj @Configurable(autowire=Autowire.BY_TYPE)) dla danej klasy i chciałbym podłączyć wszystkie ziarna danego typu do niego w postaci listy: kontekstCzy jest jakiś sposób na wiosnę, aby wyposażyć wszystkie zależności danego typu?

aplikacji:

<beans> 
    <bean class="com.my.class.FirstConfigurer"/> 
    <bean class="com.my.class.SecondConfigurer"/> 
</beans> 

klasa autowire do:

@Configurable(autowire=Autowire.BY_TYPE) public class Target { 
    ... 
    public void setConfigurers(List<Configurer> configurers) { ... } 
} 

Wszystkie zależności wdrożyć wspólny interfejs o nazwie Configurer

I Czy istnieje sposób, aby to działało, aby wszystkie zależności typu były połączone w kolekcję i były w razie potrzeby wstrzykiwane, czy też powinienem zdefiniować kod XML lub coś w tym stylu?

Odpowiedz

7

Tak,

@Inject 
private List<Configurer> configurers; 

prace, a otrzymasz listę wszystkich ziaren wykonawczych interfejsu. (wiele odmian - @Inject lub @Autowired, pole, ustawianie lub konstruktor wtrysku - wszystkie prace)

+1

Nigdy nie byłem w stanie uzyskać pracy autowiring w terenie, ale dobrze wiedzieć! –

2

To powinno działać:

@Configurable(autowire=Autowire.BY_TYPE) 
public class Target { 

    @Autowired 
    public void setConfigurers(List<Configurer> configurers) { ... } 

} 

Jest to opisane w section 3.9.2 of the Spring manual:

Możliwe jest również, aby dostarczyć wszystkie fasoli określonego typu z ApplicationContext dodając adnotację na pole lub metoda, która oczekuje tablicy tego typu [...] To samo dotyczy wpisanych kolekcji.

+0

Niestety, to nie działa dla mnie. Używam wersji 3.0.1, mam konfigurowalną definicję zdefiniowaną na mojej klasie docelowej, autowyredę zdefiniowałem na moim ustawiaczu, poprawnie skonfigurowano tkanie czasu ładowania, instancje konfiguracyjne załadowane w kontekście aplikacji, ale w przypadku tej właściwości nie jest wykonywane autowirowanie, chociaż inne właściwości są prawidłowo auteniowane. Dziwne. Widzę, że Spring tworzy konfigurator w moim kontekście aplikacji, ale kiedy przychodzi automatyczne tworzenie, to go nie uwzględnia. Czy potrzebuję więcej niż jednego, aby działał? –

Powiązane problemy