Drools对CDI进行了很好的集成,本节课带大家先了解一下CDI的基本使用,在下一节课中再讲解如何在Drools中应用CDI。

CDI简介

CDI(Contexts and Dependency Injection 上下文依赖注入),是JAVA官方提供的依赖注入实现。

@Inject是JSR330规范实现的,与spring中的@Autowired基本一样,但没有request属性。

可参看文档及管网:

  • Weld官网:http://weld.cdi-spec.org/
  • CDI文档:http://docs.jboss.org/cdi/tck/reference/latest/en-US/html/
  • CDI最新版本说明:http://www.cdi-spec.org/news/

CDI的基本使用

Maven依赖

创建Maven项目,引入以下依赖:

<!--CDI依赖开始-->
<dependency>
    <groupId>javax.enterprise</groupId>
    <artifactId>cdi-api</artifactId>
    <version>2.0</version>
</dependency>
<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.0.Final</version>
</dependency>
<!--CDI依赖结束-->

其中cdi-api在jdk1.6已经纳入j2ee中。weld-se-core是对cdi-api的封装实现。

配置文件

在resources下面的META-INF目录下添加beans.xml配置文件,配置文件中的具体配置可参看官方文档。以下示例内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd">

</beans>

具体实现

先创建一个服务类,DemoService,并提供一个打印的方法:

/**
 * @author zzs
 */
public class DemoService {

    public void print(){
        System.out.println("Hello Drools!");
    }
}

创建调用类Chapter3并进行调用:

/**
 * @author zzs
 */
public class Chapter3 {

    private final DemoService demoService;

    @Inject
    public Chapter3(DemoService demoService) {
        this.demoService = demoService;
    }

    private void print() {
        this.demoService.print();
    }

    public static void main(String[] args) {
        SeContainer seContainer = null;
        try {
            seContainer = SeContainerInitializer.newInstance().initialize();

            Chapter3 chapter3 = seContainer.select(Chapter3.class).get();

            chapter3.print();
        } finally {
            if (seContainer != null && seContainer.isRunning()) {
                seContainer.close();
            }
        }
    }

}

执行main方法,控制台打印“Hello Drools”,即可看到整个过程的实现。这里需要注意的是在构造方法上使用了@Inject,@Inject和我们平时在Spring中使用的@Autowired用法一致。

关于此技术点,以录制成视频,发布于《Drools7规则引擎进阶教程》中,详情可免费查看。

相关技术视频

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

关注微信公众

程序新视界

更多技术、架构、管理等知识分享,请关注微信公众号:程序新视界(ID:ershixiong_see_world)



Drools集成CDI(一)插图1

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2019/07/06/drools%e9%9b%86%e6%88%90cdi%ef%bc%88%e4%b8%80%ef%bc%89/