1. Wstęp do CDI
2. Beans
3. Zarządzanie beanami
4. Scopes and context
5. Events
6. Interceptors
7. Decorator

CDI - Context and Dependency injection

Java EE (Jakarta EE) od wersji Java EE 6 dostarcza technologię CDI.
Java EE 8 definiuje CDI w wersji 2.0
Jest to stanadard wstrzykiwania zależności w Java EE oraz Java SE.
CDI dostarcza również programowanie aspektowe, w formie interceptorów
Java EE określa specyfikacje, a dostępne mamy następujące implementacje:
- JBoss Weld - używana w: JBoss EAP, WildFly, Glassfish, Oracle WebLogic i IBM Websphere oraz inne.
- Apache OpenWebBeans - używana w: Apache TomEE server

CDI świetnie integruje się z EJB, JSF, Servlet oraz JAX-RS.

Konfiguracja Maven wygląda następująco:
- dla serwera aplikacji zgodnego z Java EE jako standard Java EE:
  1. <dependency>
  2.     <groupId>javax</groupId>
  3.     <artifactId>javaee-api</artifactId>
  4.     <version>8.0</version>
  5.     <scope>provided</scope>
  6. </dependency>
  7.  
- dla serwera aplikacji zgodnego z Java EE jako standard CDI:
  1. <dependency>
  2.     <groupId>javax.enterprise</groupId>
  3.     <artifactId>cdi-api</artifactId>
  4.     <version>2.0</version>
  5.     <scope>provided</scope>
  6. </dependency>
  7.  

- dla Java SE (lub dla kontenera Tomcat), możemy bezpośrednio użyć implementacji biblioteki CDI:
  1. <dependency>
  2.     <groupId>org.jboss.weld.servlet</groupId>
  3.     <artifactId>weld-servlet-core</artifactId>
  4.     <version>3.1.4.Final</version>
  5. </dependency>
  6.  
Do konfiguracji CDI musimy zdefiniować deskrypotor wdrażenia, znajduje się w:
/META-INF/beans.xml dla plików JAR
/WEB-INF/beans.xml dla plików WAR
Wygląda on następująco:
  1. <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
  4.            bean-discovery-mode="all"
  5.            version="2.0">
  6. </beans>
  7.  
Możemy ustawić bean-discovery-mode na następujące parametry:
- Annotated - ustawione domyślnie, tylko beany z adnotacjami będą zarządzane
- All - wszystkie będą zarządzane
- None - CDI jest wyłączone
created by freelancer.java.org.pl © 2021