diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginHolder.java b/sa-token-core/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginHolder.java index a4ea4c7b..d8935069 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginHolder.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/plugin/SaTokenPluginHolder.java @@ -138,7 +138,7 @@ public class SaTokenPluginHolder { * 安装指定插件 * @param plugin / */ - public synchronized void installPlugin(SaTokenPlugin plugin) { + public synchronized SaTokenPluginHolder installPlugin(SaTokenPlugin plugin) { // 插件为空,拒绝安装 if (plugin == null) { @@ -161,16 +161,19 @@ public class SaTokenPluginHolder { // 添加到插件集合 pluginList.add(plugin); + + // 返回对象自身,支持连缀风格调用 + return this; } /** * 安装指定插件,根据插件类型 * @param pluginClass / */ - public synchronized void installPlugin(Class pluginClass) { + public synchronized SaTokenPluginHolder installPlugin(Class pluginClass) { try { T plugin = pluginClass.getDeclaredConstructor().newInstance(); - installPlugin(plugin); + return installPlugin(plugin); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { throw new SaTokenPluginException(e); } @@ -192,7 +195,7 @@ public class SaTokenPluginHolder { * @param executeFunction / * @param / */ - public synchronized void onBeforeInstall(Class listenerClass, SaTokenPluginHookFunction executeFunction) { + public synchronized SaTokenPluginHolder onBeforeInstall(Class listenerClass, SaTokenPluginHookFunction executeFunction) { // 如果指定的插件已经安装完毕,则不再允许注册前置钩子函数 if(isInstalledPlugin(listenerClass)) { throw new SaTokenPluginException("插件 [ " + listenerClass.getCanonicalName() + " ] 已安装完毕,不允许再注册前置钩子函数"); @@ -200,6 +203,9 @@ public class SaTokenPluginHolder { // 堆积到钩子函数集合 beforeInstallHooks.add(new SaTokenPluginHookModel(listenerClass, executeFunction)); + + // 返回对象自身,支持连缀风格调用 + return this; } /** @@ -208,15 +214,18 @@ public class SaTokenPluginHolder { * @param executeFunction / * @param / */ - public synchronized void onAfterInstall(Class listenerClass, SaTokenPluginHookFunction executeFunction) { + public synchronized SaTokenPluginHolder onAfterInstall(Class listenerClass, SaTokenPluginHookFunction executeFunction) { // 如果指定的插件已经安装完毕,则立即执行该钩子函数 if(isInstalledPlugin(listenerClass)) { executeFunction.execute(getPlugin(listenerClass)); - return; + return this; } // 堆积到钩子函数集合 afterInstallHooks.add(new SaTokenPluginHookModel(listenerClass, executeFunction)); + + // 返回对象自身,支持连缀风格调用 + return this; } @@ -226,7 +235,7 @@ public class SaTokenPluginHolder { * 卸载指定插件 * @param plugin / */ - public synchronized void destroyPlugin(SaTokenPlugin plugin) { + public synchronized SaTokenPluginHolder destroyPlugin(SaTokenPlugin plugin) { // 插件为空,拒绝卸载 if (plugin == null) { @@ -246,14 +255,17 @@ public class SaTokenPluginHolder { // 执行该插件的 destroy 后置钩子 _consumeHooks(afterDestroyHooks, plugin.getClass()); + + // 返回对象自身,支持连缀风格调用 + return this; } /** * 卸载指定插件,根据插件类型 * @param pluginClass / */ - public synchronized void destroyPlugin(Class pluginClass) { - destroyPlugin(getPlugin(pluginClass)); + public synchronized SaTokenPluginHolder destroyPlugin(Class pluginClass) { + return destroyPlugin(getPlugin(pluginClass)); } /** @@ -272,8 +284,11 @@ public class SaTokenPluginHolder { * @param executeFunction / * @param / */ - public synchronized void onBeforeDestroy(Class listenerClass, SaTokenPluginHookFunction executeFunction) { + public synchronized SaTokenPluginHolder onBeforeDestroy(Class listenerClass, SaTokenPluginHookFunction executeFunction) { beforeDestroyHooks.add(new SaTokenPluginHookModel(listenerClass, executeFunction)); + + // 返回对象自身,支持连缀风格调用 + return this; } /** @@ -282,8 +297,11 @@ public class SaTokenPluginHolder { * @param executeFunction / * @param / */ - public synchronized void onAfterDestroy(Class listenerClass, SaTokenPluginHookFunction executeFunction) { + public synchronized SaTokenPluginHolder onAfterDestroy(Class listenerClass, SaTokenPluginHookFunction executeFunction) { afterDestroyHooks.add(new SaTokenPluginHookModel(listenerClass, executeFunction)); + + // 返回对象自身,支持连缀风格调用 + return this; } diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/SaTokenConfigure.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/SaTokenConfigure.java index e07f8048..745f7aa3 100644 --- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/SaTokenConfigure.java +++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/SaTokenConfigure.java @@ -91,19 +91,22 @@ public class SaTokenConfigure implements WebMvcConfigurer { */ @Bean public SaTokenPluginHolder getSaTokenPluginHolder() { - System.out.println("自定义逻辑"); - SaTokenPluginHolder.instance.onBeforeInstall(SaTokenPluginForJackson.class, plugin -> { - System.out.println("自定义逻辑前置"); - }); + System.out.println("自定义插件安装钩子函数..."); - SaTokenPluginHolder.instance.onAfterInstall(SaTokenPluginForJackson.class, plugin -> { - System.out.println("自定义逻辑后"); - }); - SaTokenPluginHolder.instance.onAfterInstall(SaTokenPluginForJackson.class, plugin -> { - System.out.println("自定义逻辑后置2"); - }); + return SaTokenPluginHolder.instance + .onBeforeInstall(SaTokenPluginForJackson.class, plugin -> { + System.out.println("SaTokenPluginForJackson 插件安装前置钩子..."); + }) - return SaTokenPluginHolder.instance; + .onAfterInstall(SaTokenPluginForJackson.class, plugin -> { + System.out.println("SaTokenPluginForJackson 插件安装后置钩子..."); + }) + + .onAfterInstall(SaTokenPluginForJackson.class, plugin -> { + System.out.println("SaTokenPluginForJackson 插件安装后置钩子2..."); + }) + + ; } }