SKILL.md
Java CDI Skill
Core CDI (Contexts and Dependency Injection) standards applicable to any CDI container. Covers dependency injection patterns, scopes, producer methods, events/observers, and interceptors.
Prerequisites
This skill applies to Jakarta CDI projects:
jakarta.inject:jakarta.inject-apijakarta.enterprise:jakarta.enterprise.cdi-api
Required Imports
// CDI Core
import jakarta.inject.Inject;
import jakarta.inject.Named;
import jakarta.inject.Singleton;
// CDI Scopes
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.context.SessionScoped;
import jakarta.enterprise.context.Dependent;
// CDI Producers and Optional Dependencies
import jakarta.enterprise.inject.Produces;
import jakarta.enterprise.inject.Instance;
// CDI Events
import jakarta.enterprise.event.Event;
import jakarta.enterprise.event.Observes;
import jakarta.enterprise.event.ObservesAsync;
// CDI Interceptors
import jakarta.interceptor.AroundInvoke;
import jakarta.interceptor.Interceptor;
import jakarta.interceptor.InterceptorBinding;
import jakarta.interceptor.InvocationContext;
// Quarkus Configuration
import org.eclipse.microprofile.config.inject.ConfigProperty;
References
Standards
standards/basic.md— Injection, scopes, scope mismatch rule, optional dependencies, producers, error handlingstandards/advanced.md— Events, observers, interceptors
Templates
templates/cdi-bean.java.tmpl— ApplicationScoped bean with constructor injection and Instance<T> for optional dependenciestemplates/cdi-producer.java.tmpl— Producer method with Null Object pattern (never returns null)
Quality Rules
- Constructor injection used (never field/setter injection)
- Final fields for all injected dependencies
- Single constructor (no
@Injectneeded) or@Injecton injection constructor - Appropriate scope selected for each bean
- Never inject shorter-lived scopes into longer-lived beans — use
Instance<T> Instance<T>used for optional dependencies (notProvider<T>)- Producer methods never return null
- Event payloads are immutable records
- Interceptors declare
@Priorityfor deterministic ordering
Related Skills
pm-dev-java:java-quarkus— Quarkus-specific CDI patterns, container/Docker config, securitypm-dev-java:java-core— Core Java patternspm-dev-java:junit-core— CDI testing patterns