关于Java EE中CDI的一些浅谈

博客背景

因为在公司产品中用到Java EE中的CDI,所以需要做一个探究,以满足业务需要,通过一段时间的学习,将一些基本用法讲出来,
希望与各位网友一起讨论

概述

定义:Contextual Dependency Injection,上下文依赖注入。

context,上下文,可以绑定生命周期,可以与有状态的组件交互。

DI,依赖注入,以类型安全的方式注入一个组件到应用中去,包括指定特定实现注入。

CDI还提供了以下的服务:

  1. 集成EL语言,允许组件直接在JSF和JSP中使用。
  2. 可以修饰注入的组件。
  3. 能够使用类型安全的拦截器去和组件关联
  4. 一个事件通知模型
  5. 提供的作用域有:request,session,qpplication,conversation
  6. 有完整的SPI(Service Provider Interface),允许第三方集成
    (CDI提供的服务这里只讲一些常见和常用到的,其他一下用法可以参考CDI官方文档

为什么用CDI

CDI主要是为了解耦,之前我们需要在一个类中new另外一个类,代码耦合度很高,比如:

public class Student {
    Teacher teacher = new Teacher();    
}

当我们用了CDI之后,可以这样写:

public class Student {
    @Inject
    Teacher teacher;    
}

这样我们就把new的这个动作交给容器了,并且使容器自动管理bean的生命周期,实现了component之间的松耦合

想要实现CDI管理的bean,需要满足下列全部条件(这里不包括JSF组件):

  • 如果是内部类的话,只能是静态内部类
  • 是一个具体的类或是被@Decorator修饰
  • 没有被EJB的注解标注或不是ejb-jar.xml中的EJB bean
  • 合适的构造器,下列条件其中之一:
    • 无参构造器
    • 用@Inject定义的一个构造器

可以注入的bean有哪些

  • 几乎是任何一个Java类
  • Session beans
  • Java EE的资源:数据源,JMS,Queue,连接工厂
  • 持久化上下文(JPA,EntityManager Objects)
  • 生产者属性
  • 返回生产值方法的实体
  • web service引用
  • 远程企业级bean的引用

如何使用CDI

上面提到的那种是常见的

当一个接口,有多个实现类时,怎么让容器知道注入哪一个呢?
1. 一个是用@Named直接指定类的名字,官方不推荐,这里不作展示
2. 一个是用@Qualifier的方式,请看代码:

IStudent的写法:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface IStudent {
}

然后Student实现Person接口
然后由在另外一个需要用到的类里注入

@Inject
@IStudent
private Person student;

CDI应用的配置

CDI必须有beans.xml,文件可以为空,但必须有。
1. 对一个web应用,这个文件必须在WEB-INF中。
2. 对EJB模块或JAR文件,必须在META-INF下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理解决方案。它支持流程和案例的完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来支持整个生命周期的业务流程: 基于Eclipse和基于Web的编辑器,用于支持业务流程的图形化创建(拖放)。 基于JPA / JTA的可插拔持久性和事务。 基于WS-HumanTask的可插拔人工任务服务,用于包含需要由人类执行者执行的任务。 管理控制台支持流程实例管理,任务列表和任务表单管理以及报告。 部署流程的可选流程仓库(和其他相关知识)。 历史记录(用于查询/监视/分析)。 与Seam,Spring,OSGi等集成 BPM通过以业务用户和开发人员喜欢的方式提供流程管理功能和工具,从而实现业务分析师,开发人员和最终用户之间的桥梁。域特定的节点可以插入调色板,使业务用户更容易理解这些过程。 jBPM支持自适应和动态过程,需要灵活性来模拟复杂的现实生活的情况,这些情况不能用刚性过程轻松描述。我们通过允许他们控制进程的哪些部分来执行,动态地偏离进程等,使控制回到终端用户。 jBPM也不仅仅是一个独立的流程引擎。复杂的业务逻辑可以被建模为业务流程与业务规则和复杂事件处理的组合。jBPM可以与Drools项目相结合,以支持将这些范例集成到一起的统一环境,您可以将业务逻辑作为过程,规则和事件的组合进行建模。 工作是MAVEN+eclipse jBPM jars也可以在央maven仓库使用 (也可以在JBoss maven仓库)。 如果您使用Maven,只需添加一个依赖关系pom.xml: org.jbpm jbpm-test 7.3.0.Final 这与Gradle,Ivy和Buildr类似。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值