JFinal-event 3.1.1 发布,添加类扫描的开关

一、说明

  在 JFinal-event 3.0 比较激进的采用了注解处理器,在不使用 mavengradle 等包管理或者开发工具不支持,会导致不生成 dream.events 配置文件。对于这种情况你可以采用开启类扫描的形式。

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

// 开启类扫描,默认为 false,用于不支持注解处理器的情况,用于不使用 maven 或者不支持注解处理器的情况。
plugin.enableClassScan();
// 扫描 jar 里的 监听器,默认不扫描,在开启 enableClassScan 有效果
plugin.scanJar();
// 扫描的包,默认全扫描,可提升启动速度,在开启 enableClassScan 有效果
plugin.scanPackage("com.xxx.包名");

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

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

如果你是使用的 maven ,我还是推荐你不用类扫描的方式,注解处理器可以提速项目启动的时间。

或者你可以根据 JFinal.me().getConstants().getDevMode(),判断是否开启类扫描,因为注解处理器 maven 是支持的。

本地 ide 支持情况各不同,idea 中需要配置开启注解处理器。

详细使用说明请见:https://gitee.com/596392912/JFinal-event


二、使用场景

JFinal event 适用于单服务内部的事件总线,当然也可以结合 mq 来使用,jfinal-event 曾经也开发过基于 rmi 的远程事件版本。后期放弃了,毕竟使用 mq 会更有优势。

场景列举:

1. 自定义 jfinal base model,cud 时发送 cud 事件,解耦代码,任何地方都可以监听 event。

2. 业务解耦,例如:下单完成时的功能:

a. 用户积分

b. 短信消息

c. 邮件消息

d. 公众号消息等

e. 异步日志

3. websocket中使用,将消息和业务解耦。

这时候我们可以在 支付完成后的业务代码添加一个事件发送。

然后就可以将上面的几个功能写到不同的监听器里,(一个事件是可以有多个监听的)

事件无处不在,html 元素里都是事件监听,如果真想清楚了一通百通。


三、开启注解处理器

eclipse:

jfinal-event-eclipse-1.png

idea:

Inkedjfinal-event-idea_LI.jpg

四、JFinal-event idea 插件众筹

使用 JFinal-event 可以解耦复杂的业务逻辑,也给新手带来不少疑惑,找不到具体的监听逻辑。

Idea 为 Spring 开发了一个可以在 event 和 Listener 跳转的插件,如下图:

001.jpg

002.jpg


gif动图:https://oscimg.oschina.net/oscnet/up-016dcb879d4fa8e665eea14ca7a2705cf19.gif

为了使 JFinal event 的广大使用者也带来类似的工具,我在此众筹此插件,插件也将开源。

众筹金额:¥1000,人满开车。

出资¥10元者,插件开源项目 readme 中添加各位爸爸的名字。

出资¥100元者,另外附送一堂 JFinal-event 的原理和使用得钉钉直播课程。

我的微信号:

dreamlu.jpg

微信众筹收款码:

wexin.jpg

对于有意愿参与众筹的朋友,快快加我个人微信吧。

如果你在使用 idea 和 JFinal-event 快快帮忙转发吧。

众筹进度:

总额:¥448

明细:

LINQI ¥20

LastB7 ¥10

杜福忠兄弟们 ¥80

小续 ¥100

Jfinal 用户zhangqi ¥100

jfinal使用者问号?¥20

*哥 ¥18

山东小木 ¥100

感谢大伙的支持!

评论区

山东小木

2020-01-13 12:27

插件是你自己开发 还是委托他人?

xkcoding

2020-01-13 13:19

春哥出品,必属精品!

Dreamlu

2020-01-13 13:22

@山东小木 我自己开发

Dreamlu

2020-01-13 13:31

@xkcoding 感谢支持

九五二七

2020-01-13 13:50

l745230

2020-01-13 13:55

给春哥点赞,虽然还没用上JFinal-event,但是春哥出品,必属精品!

杜福忠

2020-01-13 14:13

这个项目我王多鱼投了!

zzutligang

2020-01-13 14:18

@Dreamlu eventPlugin.scanPackage("")这个方法废弃了吗?没有这个方法,项目启动会等很久。以前2,3秒可以启动起来,现在需要30,40秒。

明州刀客

2020-01-13 15:31

直接留个捐赠二维码吧,加微信多麻烦。。。

vk567

2020-01-13 17:39

支持,已经捐助

Dreamlu

2020-01-13 20:37

@zzutligang 我发个小版本兼容一下。

Dreamlu

2020-01-13 21:14

@vk567 感谢支持

Dreamlu

2020-01-13 21:14

Dreamlu

2020-01-13 21:15

@l745230 @杜福忠 感谢支持,哈哈

zzutligang

2020-01-13 21:15

@Dreamlu 我从代码仓库里下了源码,自己修改了一下。增加了一个包名成员变量和scanPackage,然后在create函数里判断这个包名成员变量不为空,就调用那个扫描指定包的方法,否则,就调用扫描所有包的方法。这样做可以吧。

Dreamlu

2020-01-13 21:17

@zzutligang 可以的,v3.1.1 已经提交了

jfinal009

2020-01-14 08:52

建议提供实践案例,快速应用到项目中,谢谢。

Dreamlu

2020-01-14 09:39

@jfinal009 详细使用说明请见:https://gitee.com/596392912/JFinal-event

山东小木

2020-01-14 10:52

需要个对比说明 什么场景 什么业务 什么时候用JFinal-event 这样小白看了就不懵逼了