Przeszukiwanie drzewa
Kontener składa się z hierarchii komponentów ułożonych w strukturę drzewa. Drzewo jest dynamiczne – komponenty mogą być dodawane lub usuwane w trakcie działania kontenera. Z tego powodu w celu uzyskania dostępu do komponentów należy przeszukiwać drzewo.
Komponenty zgodne z typem
Pierwszy komponent (indeksowany)
Zwraca pierwszy element będący instancjami podanego typu lub jego podtypów. Typ sprawdzany jest na podstawie operatora instanceof i nie jest skorelowany z kolejnością komponentów. Kiedy nie znajdzie, żadnego danego typu zwraca null.
var myComponent = container().getComponent(MyComponent.class);
// or
var instances = container().getComponent(MyInterface.class);
Wszystkie komponenty (indeksowany)
Zwraca zbiór elementów będących instancjami podanego typu lub jego podtypów. Zbiór nie uwzględnia kolejności elementów. Typ sprawdzany jest na podstawie operatora instanceof. Kiedy nie znajdzie zadnego danego typu zwraca pusty zbiór.
var myComponents = container().getComponents(MyComponent.class);
// or
var instances = container().getComponents(MyInterface.class);
TIP
Jeśli potrzebujesz zawsze jednego komponentu albo niepustego zbioru, zobacz adnotację @Dependency i wyszukiwanie komponentu zależnego.
Pierwszy komponent w określonej kolejności
Przeszukuje drzewo w kolejności specjalizacji lub generalizacji i zwraca pierwszy komponent zgodny z typem. Traktuje komponent na którym zostałą wykonana metoda jako korzeń (nie chodzi do jego rodziców). Kiedy nie znajdzie, żadnego danego typu zwraca null.
// Przeszukuje drzewo w kolejności Generalizacja -> Specjalizacja
var myComponent = component.findComponentSpecOrd(MyComponent.class);
var instance = component.findComponentSpecOrd(MyInterface.class);
// Przeszukuje drzewo w kolejności Specjalizacaj -> Generalizacja
var myComponent = component.findComponentGeneOrd(MyComponent.class);
var instance = component.findComponentGeneOrd(MyInterface.class);
Wszystkie komponenty w określonej kolejności
Przeszukuje drzewo i zwraca listę komponentów zgodnych z typem w kolejności specjalizacji lub generalizacji. Traktuje komponent na którym zostałą wykonana metoda jako korzeń (nie chodzi do jego rodziców). Kiedy nie znajdzie, żadnego danego typu zwraca null.
// Przeszukuje drzewo w kolejności Generalizacja -> Specjalizacja
var myComponents = component.findComponentsSpecOrd(MyComponent.class);
var instances = component.findComponentsSpecOrd(MyInterface.class);
// Przeszukuje drzewo w kolejności Specjalizacaj -> Generalizacja
var myComponents = component.findComponentGeneOrd(MyComponent.class);
var instances = component.findComponentsGeneOrd(MyInterface.class);