【Java 笔记】Java CDI 相关整理

本文详细介绍了Java CDI(Contexts and Dependency Injection)的概念和使用,包括@Inject注解的三种注入方式,@Any修饰符的应用,以及如何通过生产者方法实现多态和依赖注入。此外,还探讨了Bean的作用域、销毁处理以及在生产者方法中的应用。内容深入浅出,适合Java EE开发者学习。
摘要由CSDN通过智能技术生成

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 简介

  • CDI(Contexts And Dependency Injection)是 JavaEE 6 标准中一个规范,将依赖注入 IOC/DI 上升到容器级别, 它提供了 Java EE 平台上服务注入的组件管理核心,简化是 CDI 的目标,让一切都可以被注解被注入。
    • CDI 的思想来自 Spring,但是它的开发模式来自 Jboss seam
    • CDI 是为了解决 EJB、javabean 被 web 层组件引用困难的问题。
    • 大目标是为了提供 Java Web 开发中一种通用、快捷的途径。
  • Contexts and Dependency Injection,意思是 上下文依赖注入,依赖注入基本概念和 Spring 一样。
    • 上下文就是熟知的 Context,对于 CDI 而言,具有上下文的特性,就认为具有管理 Bean 生命周期的能力。
    • 因为 CDI 是为了 Web 开发而成,这种上下文概念就认为每个 Web Bean 是有状态的,它的生命周期将由客户端(http client)的状态所决定,和无状态组件模型(POJO,stateless EJB)或一个单例模型组件(如 Servlet 或单例 Bean)不同,一个 Web Bean 的不同客户端看到的 Web Bean 的状态是不同的。
    • 客户端所见的状态取决于这个客户端拥有的是哪一个 Web Bean 实例的引用。
  • 在 Maven 项目的 pom.xml 文件中进行引入包。
<dependency>
   <groupId>javax.enterprise</groupId>
   <artifactId>cdi-api</artifactId>
   <version>2.0</version>
   <scope>provided</scope>
</dependency>

2. @Inject 注解

  • CDI 主要使用 @Inject 注解来实现依赖注入,把受管理的 Bean 注入到由容器管理的其它资源中去。

2.1 构造器依赖注入

  • 使用 @Inject 进行了注解的构造器时,这种情况下,容器会改用有注解的构造器而不是无参构造器,并且把通过构造器参数传入的依赖资源注入到 Bean 实例中来。
  • 一个类只允许有 一个 @Inject 注解的构造器。
public class SomeBean {
  
  private final Service service;

  @Inject
  public SomeBean(Service service){
    this.service = service;
  }

}

2.2 字段依赖注入

  • 当容器初始化一个 SomeBean 类型的 Bean 时,它会把一个正确的 Service 实例注入给该字段,即使该字段是一个私有字段,并且不需要有任何 setter 方法。
public class SomeBean {
  
  @Inject
  private Service service;

}

2.3 初始化方法依赖注入

  • 当容器初始化一个 SomeBean 类型的 Bean 时,会调用所有由 @Inject 注解了的方法,并且通过方法参数的方式把依赖注入进来。
public class Some
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值