1. Wstęp do CDI 2. Beans 3. Zarządzanie beanami 4. Scopes and context 5. Events 6. Interceptors 7. Decorator |
Bean możemy identyfikować n 3 sposoby: I. Typ II. Typ i kwalifikator III. przez nazwę (adnotacja @Named) I) przez Typ 1. Teraz pokażę przykłady dla konfiguracji beans.xml bean-discovery-mode="all". Czyli każda klasa jest zarządzana. Zobaczmy pierwszy przykład: implementujemy interface:
po tej samej klasie będzie błąd, niejednoznaczności wstrzyknięcia. dodajemy do powyższych klas klasę OtherBean.java:
Jeden ze sposobów na rozwiązanie tego problemu to ustawienie @Veted na klasie którą nie chcemy mieć zarządzanej przez CDI.
Możemy użyć adnotacji @Any na polu Instance<T> przy wstrzyknięciu zależności. Instance jest to interface który powoduje leniwe wstrzyknięcie beanu Bean pobieramy używając metody get(). Uzyskujemy w ten sposób dynamicznie aktualną instancję beana. Instance implementuje on interface iterable<T> przez co możemy użyć pętli forEach.
3. Zobaczmy trzeci sposób na rozwiązanie tego problemu Aby ten błąd rozwiązać możemy użyć adnotacji @Alternative, wtedy ta klasa będzie użyta jako alternatywna. @Default będzie w pierwszej kolejności wstrzyknięta. @Default jest domyślną wartością, nie trzeba jej dodawać, dodanie jej jawnie jest nadmiarowe.
Pobiera on aktualną instancję klasy, najbardziej zaktualizowaną. Mamy klasę:
I wyświetlone jest 5x to samo: 2020-19-03 01:19:44.896 2020-19-03 01:19:44.896 2020-19-03 01:19:44.896 2020-19-03 01:19:44.896 2020-19-03 01:19:44.896 Drugie pole myInterfaceInstance wraz z wywołaniem ".get()", tworzy nową instancje przy każdym wywołaniu metody ".get()". Instancja jest nowa za każdym razem ponieważ domyślny zasięg klasy (scope), jest @Dependent. My Interface Instance: 2020-19-03 01:19:50.902 2020-19-03 01:19:51.903 2020-19-03 01:19:52.903 2020-19-03 01:19:53.904 2020-19-03 01:19:54.904 II) przez Typ i kwalifikator Wstrzyknięcie może być określone przez kwalifikator (Qualifier).
docs.oracle.com/../RetentionPolicy.html Możliwe wartości dla adnotacji target dla Java 11 pod linkem: docs.oracle.com/../ElementType.html
tak identyfikujemy beany dla komponentów JSF. i tym sposobem aby połączyć się do klasy kontrolera: MyFirstController, używamy wyrażenia EL, i możemy dostać się do niego za pomocą: <h:outputText value="#{myFirstController.getNameFromInterface()}" /> |
---|---|