博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal-event v2.3.0 发布,简化 Event 事件类
阅读量:6080 次
发布时间:2019-06-20

本文共 2493 字,大约阅读时间需要 8 分钟。

  hot3.png

说明

JFinal-event 2.x 参考 Spring 4.2.xEvent 的使用方式而生,为 JFinal 用户带来更多方便。其核心目标是深层次解耦,为您节约更多时间,去陪恋人、家人和朋友 :)

年初 @idoz 提议实现类似 Spring 4.2 里的 PayloadApplicationEvent,其实我早就有此想法,一直没有抽出时间来折腾。

顺便在 码云上添加了 ,有2点功能:

第一点,实现 PayloadApplicationEvent 不难。扩展个 EventType

class1 为 ApplicationEvent 类 或者 PayloadApplicationEvent类信息class2 为 ApplicationEvent 泛型,或者 Payload 中的类信息

第二点,将类扫描改为 annotation Processor 编译期处理(避免容器环境差异)

由于 @EventListener 注解可以在任何方法中,annotation Processor 需要扫描 *,然后 找出 对应的含有 @EventListener 方法的类,然后写入 META-INF/dream.events 文件中。

本次版本升级完成了第一点,第二点由于觉得更加适合底层框架去实现,从而方便扩展,对于 annotation Processor 感兴趣的朋友可以了解我的开源

更新说明

2019-04-08 v2.3.0

  • 升级到 jfinal 3.8。

  • 支持 @EventListener 方法可以无参数。

  • ObjenesisBeanFactory 和 jfinal Aop inject 冲突,去掉对 JFinal inject 支持,标记为弃用。

  • 新增 SourceClass 作为 event 事件源(同 Spring PayloadApplicationEvent),event模型不再需要实现 ApplicationEvent

  • @EventListener 注解新增 value 变量,功能同 events。

  • 修复 @EventListener events 参数类型判断bug。

初始化插件

// 初始化插件EventPlugin plugin = new EventPlugin();// 设置为异步,默认同步,或者使用`threadPool(ExecutorService executorService)`自定义线程池。plugin.async();​// 设置扫描jar包,默认不扫描plugin.scanJar();// 设置监听器默认包,多个包名使用;分割,默认全扫描plugin.scanPackage("net.dreamlu");// bean工厂,默认为DefaultBeanFactory,可实现IBeanFactory自定义扩展// 对于将@EventListener写在不含无参构造器的类需要使用`ObjenesisBeanFactory`(2.3.0 已经不推荐使用)plugin.beanFactory(new ObjenesisBeanFactory());​// 手动启动插件,用于main方法启动,jfinal中不需要,添加插件即可。plugin.start();​// 停止插件,用于main方法测试plugin.stop();

新建事件类(任意模型即可 2.3.0支持)

public class AccountEvent {​    private Integer id;    private String name;    private Integer age;​    // 省略 get set​}

编写监听

@EventListenerpublic void listenTest1Event(AccountEvent event) {    System.out.println("AccountEvent:" + event);}

发送事件

AccountEvent event = new AccountEvent();event.setId(1);event.setName("张三");event.setAge(18);​EventKit.post(event);

@EventListener注解说明

使用示例

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

注解说明

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

public class Test {​    // Test1Event, Test2Event 为 TestEvent 子类    @EventListener({Test1Event.class, Test2Event.class})    public void applicationEvent(TestEvent event) {        System.out.println(Thread.currentThread().getName() + "\tevent:" + event);    }}
  • order排序,数值越小越先执行,默认为Integer.MAX_VALUE

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

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

jar依赖

jar包下载/

以上版本均已上传到maven仓库~

   
net.dreamlu
   
JFinal-event
   
2.3.0

转载地址:http://oyegx.baihongyu.com/

你可能感兴趣的文章
计算机语言的基本理论
查看>>
[转]java加密算法简要介绍
查看>>
aaa
查看>>
批处理命令篇--配置免安装mysql
查看>>
VMWare虚拟机系统网络配置
查看>>
性能优化你必须知道的那些事儿
查看>>
锋利的jQuery-4--给事件添加命名空间
查看>>
linux概念之cpu分析
查看>>
性能调优攻略
查看>>
Java策略模式(Strategy模式) 之体验
查看>>
负载均衡探测器lbd
查看>>
【转】浅谈.net remoting 与webservice
查看>>
Golang 笔记 5 go语句
查看>>
ef core
查看>>
JavaScript——DOM或以树形展示的Web页面
查看>>
Linux之用户管理--初级上
查看>>
使用Chrome快速实现数据的抓取(一)——概述
查看>>
数据库原理及应用第7章课后习题答案
查看>>
开始前的准备
查看>>
LeetCode(30) Substring with Concatenation of All Words
查看>>