Drools集成CDI(一)

2022-05-09 19:23:20 浏览数 (1)

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项目,引入以下依赖:

代码语言:javascript复制
<!--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配置文件,配置文件中的具体配置可参看官方文档。以下示例内容:

代码语言:javascript复制
<?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,并提供一个打印的方法:

代码语言:javascript复制
/**
 * @author zzs
 */
public class DemoService {

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

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

代码语言:javascript复制
/**
 * @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规则引擎进阶教程》中,详情可免费查看。

原文链接:https://www.choupangxia.com/topic/detail/90

相关技术视频

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

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

CSDN学院:《Drools7系列优惠套餐》

0 人点赞