集体博客:无奈何杨(wnhyang)
集体语雀:wnhyang
共享语雀:在线常识共享
Github:wnhyang - Overview
前文提到很屡次satoken
的事件公布,应用的是观察者模式,这次就来探索一下,很简略的。
参考官网:全局侦听器
观察者模式
简介:观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态产生扭转时,其所有依赖者都会收到告诉并自动更新。
在sa-token-core
的cn.dev33.satoken.listener
包下有
SaTokenListener
下面就是它的所有形象办法,如正文形容的那样:你能够通过实现此接口在用户登录、退出等关键性操作时进行一些AOP
切面操作。
SaTokenListenerForLog
框架中唯二实现SaTokenListener
接口的类。
之前贴图的satoken
日志都是由此类实现的。
SaTokenListenerForSimple
/** * Sa-Token 侦听器,默认空实现 * * <p> 对所有事件办法提供空实现,不便开发者通过继承此类疾速实现一个可用的侦听器 </p> * * @author click33 * @since 1.31.0 */public class SaTokenListenerForSimple implements SaTokenListener { ...}
SaTokenEventCenter
/** * Sa-Token 事件核心 事件公布器 * * <p> 提供侦听器注册、事件公布能力 </p> * * @author click33 * @since 1.31.0 */public class SaTokenEventCenter { // --------- 注册侦听器 private static List<SaTokenListener> listenerList = new ArrayList<>(); static { // 默认增加控制台日志侦听器 listenerList.add(new SaTokenListenerForLog()); } ...}
SaTokenEventCenter
从命名就能够晓得这是satoken
的事件公布核心类。次要属性就是List<SaTokenListener> listenerList
,也就是所有侦听器,其办法次要分为两类:一类是治理侦听器,另一类就是事件公布,而且所有办法都是静态方法。
主动注册侦听器
在Spring
环境中,应用Spring Boot
主动注入,还是要回到sa-token-spring-boot-autoconfig
,SaBeanInject
中有如下办法帮忙实现侦听器的注册。
/** * 注入侦听器Bean * * @param listenerList 侦听器汇合 */@Autowired(required = false)public void setSaTokenListener(List<SaTokenListener> listenerList) { SaTokenEventCenter.registerListenerList(listenerList);}
事件公布
实现侦听器的注册后,就能够欢快的事件公布了。即调用SaTokenEventCenter.doXxx
办法。
/** * 事件公布:xx 账号登录 * @param loginType 账号类别 * @param loginId 账号id * @param tokenValue 本次登录产生的 token 值 * @param loginModel 登录参数 */public static void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) { for (SaTokenListener listener : listenerList) { listener.doLogin(loginType, loginId, tokenValue, loginModel); }}
留神这里是同步事件公布,非异步。
写在最初
拙作艰苦,字句心血,望诸君垂青,多予反对,不胜感激。
集体博客:无奈何杨(wnhyang)
集体语雀:wnhyang
共享语雀:在线常识共享
Github:wnhyang - Overview