1. 首页
  2. 技术文章
  3. Java类库

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