说明
年初 @idoz 提议实现类似 Spring 4.2 里的 PayloadApplicationEvent,其实我早就有此想法,一直没有抽出时间来折腾。 顺便在 码云上添加了 issues 3.0优化,有2点功能: 第一点,实现 PayloadApplicationEvent 不难。扩展个 EventTypeclass1 为 ApplicationEvent 类 或者 PayloadApplicationEvent类信息class2 为 ApplicationEvent 泛型,或者 Payload 中的类信息 第二点,将类扫描改为 annotation Processor 编译期处理(避免容器环境差异)由于 @EventListener 注解可以在任何方法中,annotation Processor 需要扫描 本次版本升级完成了第一点,第二点由于觉得更加适合底层框架去实现,从而方便扩展,对于 annotation Processor 感兴趣的朋友可以了解我的开源 mica-auto 更新说明2019-04-08 v2.3.0
初始化插件// 初始化插件
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
}
编写监听@EventListener
public 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()") 注解说明
public class Test {
// Test1Event, Test2Event 为 TestEvent 子类
@EventListener({Test1Event.class, Test2Event.class})
public void applicationEvent(TestEvent event) {
System.out.println(Thread.currentThread().getName() + "\tevent:" + event);
}
}
jar依赖jar包下载http://central.maven.org/maven2/net/dreamlu/JFinal-event/ 以上版本均已上传到maven仓库~ <dependency> <groupId>net.dreamlu</groupId> <artifactId>JFinal-event</artifactId> <version>2.3.0</version> </dependency> |