CDI API框架中常用的注解和接口
CDI (Contexts and Dependency Injection) API 是 Java EE(现已改名为 Jakarta EE)的一部分,它提供了一种用于在 Java 应用程序中实现依赖注入的标准化机制。CDI API 通过一组注解和接口,简化了开发者在应用程序中管理对象之间的依赖关系的过程。以下是 CDI API 中常用的注解和接口:
1. `@Inject` 注解:用于将依赖对象注入到目标类中。通过在目标属性、构造函数或方法上使用 `@Inject` 注解,CDI 容器会自动解析并注入相应的对象。
@Inject
private ExampleService exampleService;
2. `@Named` 注解:用于为依赖对象指定一个可识别的名称。这样在注入时,可以使用该名称来指定具体要注入的对象。
@Named("exampleDao")
public class ExampleDaoImpl implements ExampleDao {
...
}
3. `@Qualifier` 注解:用于结合 `@Inject` 注解,以提供更精确的注入方式。开发者可以自定义限定符(qualifier)注解,通过该注解来区分不同的注入对象。
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
public @interface ExampleQualifier {
...
}
@Inject
@ExampleQualifier
private ExampleService exampleService;
4. `@Singleton` 注解:用于将一个类声明为单例模式,在整个应用程序中只创建一个实例。被 `@Singleton` 注解标记的类,会在 CDI 容器启动时自动实例化并管理。
@Singleton
public class ExampleSingleton {
...
}
5. `@RequestScoped` 注解:用于将一个类声明为请求作用域,在每个请求处理过程中创建一个实例。这样可以确保每次请求时,对象都是全新的。
@RequestScoped
public class ExampleRequestScoped {
...
}
除了以上的注解外,CDI API 还提供了一些常用的接口,用于支持依赖注入、上下文管理和事件触发的功能。以下是其中的几个常用接口:
1. `javax.enterprise.inject.spi.Bean` 接口:表示一个被 CDI 管理的实例或者构造函数。开发者可以通过该接口获取有关于实例的元数据信息,以及对实例的操作。
public interface Bean<T> {
BeanAttributes<T> getBeanAttributes();
T create(CreationalContext<T> creationalContext);
void destroy(T instance, CreationalContext<T> creationalContext);
...
}
2. `javax.enterprise.inject.spi.InjectionPoint` 接口:表示一个依赖注入点,用于描述将要被注入的目标信息。通过该接口,开发者可以获取目标属性、构造函数和方法的详细信息。
public interface InjectionPoint {
Annotated getAnnotated();
Bean<?> getBean();
...
}
3. `javax.enterprise.context.spi.Context` 接口:表示一个上下文,用于管理某一类实例的生命周期。不同的上下文类型,例如请求作用域、会话作用域等,可以在 CDI 容器和应用程序中进行配置和交互。
public interface Context {
<T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext);
<T> T get(Contextual<T> contextual);
...
}
通过使用上述注解和接口,开发者可以更加简便地实现依赖注入、上下文管理和事件触发等功能,提高应用程序的可维护性和灵活性。
Read in English