JFinal-event(JFinal事件驱动插件)

模仿的Spring中的消息事件:详解Spring事件驱动模

代码简单无任何第三方依赖,具体使用如下:

//?初始化插件
EventPlugin?plugin?=?new?EventPlugin();
//?设置为异步,默认同步,或者使用`threadPool(ExecutorService?executorService)`自定义线程池。
plugin.async();

//?设置扫描jar包,默认不扫描
plugin.scanJar();
//?设置监听器默认包,默认全扫描
plugin.scanPackage("net.dreamlu");

//?bean工厂,默认为DefaultBeanFactory,可实现IBeanFactory自定义扩展
plugin.beanFactory(new?DuangBeanFactory());

//?手动启动插件,用于main方法启动,jfinal中不需要,添加插件即可。
plugin.start();

//?停止插件,用于main方法测试
plugin.stop();

新建事件类

//?继承?ApplicationEvent
public?class?Test1Event?extends?ApplicationEvent?{
????private?static?final?long?serialVersionUID?=?6994987952247306131L;
????????public?Test1Event(Object?source)?{
????????super(source);
????}
}

编写监听

public?class?TestListener?{
	@EventListener
	public?void?listenTest1Event(Test1Event?event)?{
	????System.out.println("Test1Event:"?+?event.getSource());
	}

	@EventListener
	public?void?listenTest1Event(Test2Event?event)?{
	????System.out.println("Test1Event:"?+?event.getSource());
	}
}

发送事件

EventKit.post(new?Test1Event("hello1"));

@EventListener注解说明

@EventListener(events?=?Test1Event.class,?order?=?1,?async?=?true,?condition?=?"event.isExec()")

说明

1. events支持的事件类型数组,用于将事件方法定义为ApplicationEvent或者自定义父类。

@EventListener(events?=?Test1Event.class)
public?void?applicationEvent(ApplicationEvent?event)?{
????String?xx?=?(String)?event.getSource();
????System.out.println(Thread.currentThread().getName()?+?"\tsource:"?+?xx);
}

2. order排序,数值越小越先执行,默认为Integer.MAX_VALUE

3. async异步执行,需要插件开启async()或者自定义线程池。

4. condition表达式条件,使用event.xxxx,event.isExec() == true判定event的属性或者方法。

源码连接:http://git.oschina.net/596392912/JFinal-event

jar包下载:

http://central.maven.org/maven2/net/dreamlu/JFinal-event/


????net.dreamlu
????JFinal-event
????2.0.4

更新说明:

2017-11-29 v2.0.4

添加ObjenesisBeanFactory处理不含有默认构造器的Bean 依赖objenesisjar包,

下载地址:http://mvnrepository.com/artifact/org.objenesis/objenesis/2.6

2017-10-11 v2.0.3

支持多包名,用;分割,如:net.dreamlu.a;net.dreamlu.b。?

插件初始化时,没有扫描到监听时依然初始化成功。

2017-10-11 v2.0.2

2.x bug修复版

2017-10-11 v2.0.1

插件添加Bean工厂,方便IOC容器和自定义扩展。 默认为DefaultBeanFactory,可实现IBeanFactory自定义扩展。plugin.beanFactory(new DuangBeanFactory());

2017-10-10 v2.0.0

基于注解和方法的兼听,简化使用,不兼容1.x

2017-04-28 v1.5.1

  1. 基于rmi的远程Event

2017-03-22 v1.4.2

  1. 更改默认线程池为SingleThreadExecutor,使异步执行有序化。

  2. 添加EventThreadFactory,处理异步时的异常避免影响服务请求。

建议:如果event需要发送大量的异步事件,建议使用自定义线程池。?

如:eventPlugin.threadPool(Executors.newCachedThreadPool(new EventThreadFactory()));

2017-02-15 v1.4.1

  1. 添加自定义线程池EventPlugin.threadPool(ExecutorService executorService)方法

2016-08-19 v1.4.0

  1. 升级到JFinal2.2,JFinal低版本用户请使用v1.2.0。

  2. EventKit.postEvent(event)更改为EventKit.post(event),postEvent不再建议使用。

  3. 添加EventKit.post(tag, event)方法,@Listener(order = 2, tag = "save")添加tag