扫描仪驱动插件(自动扫描仪驱动下载)

扫描仪驱动插件(自动扫描仪驱动下载)

首页办公设备扫描仪更新时间:2021-12-12 21:15:21

JFinal-event是JFinal框架的一个事件驱动插件,其核心目标是深层次解耦,为您节约更多时间,去陪恋人、家人和朋友 :)

事件驱动模型简介

事件驱动模型也就是我们常说的观察者,或者发布-订阅模型;我是这样理解他的:

就仿佛一块石头丢进了池塘里,会泛起一圈一圈的涟漪!其他人只要看到涟漪就知道你个二货又在扔石子·。·

接下来先看一个用户注册的例子:

用户注册成功后,需要做这么多事:

  1. 加积分
  2. 发确认邮件
  3. 如果是游戏帐户,可能赠送游戏大礼包
  4. 索引用户数据 …………

如果这些业务都耦合到UserService或者JFinal中的UserController中,将会变得异常复杂。

下面笔者列举使用JFinal-event来解决这类问题

编写用户保存事件

public class UserSaveEvent extends ApplicationEvent { private static final long serialVersionUID = 6994987952247306131L; public UserSaveEvent(Object source) { super(source); } }

在用户save完成之后触事件

boolean temp = userModel.save(); if (temp) { EventKit.postEvent(new UserSaveEvent(userModel)); }

后面就是个个业务的事件监听了,例如邮件业务

// 注解标记,切勿忘记 @Listener public class UserSaveEmailListener implements ApplicationListener { @Override public void onApplicationEvent(UserSaveEvent event) { OrderModel order = (UserModel) event.getSource(); // 你的逻辑 // EmailUtils.sendXxxxx } }

初始化插件

// 初始化插件 Eventplugin plugin = new EventPlugin(); // 设置为异步,默认同步,或者使用`threadPool(ExecutorService executorService)`自定义线程池。 plugin.async(); // 设置扫描jar包,默认不扫描 plugin.scanJar(); // 设置监听器默认包,多个包名使用;分割,默认全扫描 plugin.scanPackage("net.dreamlu"); // bean工厂,默认为DefaultBeanFactory,可实现IBeanFactory自定义扩展 // 对于将@EventListener写在不含无参构造器的类需要使用`ObjenesisBeanFactory` 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); } }

编写监听

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

发送事件

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

@EventListener注解说明

示例

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

说明

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

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

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

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

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

使用的场景优势

请参考详解Spring事件驱动模型

,

大家还看了
也许喜欢
更多栏目

© 2021 3dmxku.com,All Rights Reserved.