From 9713b4fe26b32623f28ede5c7f51646bdc665f75 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Tue, 16 Aug 2022 09:40:16 +0800 Subject: [PATCH] =?UTF-8?q?SaSession=20=E8=AF=BB=E5=86=99=E5=80=BC?= =?UTF-8?q?=E6=8A=BD=E5=8F=96=E5=85=AC=E5=85=B1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../satoken/session/SaGetValueInterface.java | 202 ++++++++++++ .../cn/dev33/satoken/session/SaSession.java | 290 ++---------------- 2 files changed, 221 insertions(+), 271 deletions(-) create mode 100644 sa-token-core/src/main/java/cn/dev33/satoken/session/SaGetValueInterface.java diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaGetValueInterface.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaGetValueInterface.java new file mode 100644 index 00000000..cbdb8c09 --- /dev/null +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaGetValueInterface.java @@ -0,0 +1,202 @@ +package cn.dev33.satoken.session; + +import cn.dev33.satoken.fun.SaRetFunction; +import cn.dev33.satoken.util.SaFoxUtil; + +/** + * 对取值写值的一组方法封装 + * + * @author kong + * @since: 2022-8-16 + */ +public interface SaGetValueInterface { + + // --------- 需要子类实现的方法 + + /** + * 取值 + * @param key key + * @return 值 + */ + public abstract Object get(String key); + + /** + * 写值 + * @param key 名称 + * @param value 值 + * @return 对象自身 + */ + public abstract SaGetValueInterface set(String key, Object value); + + + // --------- 接口提供封装的方法 + + // 取值 + + /** + * + * 取值 (指定默认值) + * @param 默认值的类型 + * @param key key + * @param defaultValue 取不到值时返回的默认值 + * @return 值 + */ + public default T get(String key, T defaultValue) { + return getValueByDefaultValue(get(key), defaultValue); + } + + /** + * + * 取值 (如果值为 null,则执行 fun 函数获取值,并把函数返回值写入缓存) + * @param 返回值的类型 + * @param key key + * @param fun 值为null时执行的函数 + * @return 值 + */ + @SuppressWarnings("unchecked") + public default T get(String key, SaRetFunction fun) { + Object value = get(key); + if(value == null) { + value = fun.run(); + set(key, value); + } + return (T) value; + } + + /** + * 取值 (转String类型) + * @param key key + * @return 值 + */ + public default String getString(String key) { + Object value = get(key); + if(value == null) { + return null; + } + return String.valueOf(value); + } + + /** + * 取值 (转int类型) + * @param key key + * @return 值 + */ + public default int getInt(String key) { + return getValueByDefaultValue(get(key), 0); + } + + /** + * 取值 (转long类型) + * @param key key + * @return 值 + */ + public default long getLong(String key) { + return getValueByDefaultValue(get(key), 0L); + } + + /** + * 取值 (转double类型) + * @param key key + * @return 值 + */ + public default double getDouble(String key) { + return getValueByDefaultValue(get(key), 0.0); + } + + /** + * 取值 (转float类型) + * @param key key + * @return 值 + */ + public default float getFloat(String key) { + return getValueByDefaultValue(get(key), 0.0f); + } + + /** + * 取值 (指定转换类型) + * @param 泛型 + * @param key key + * @param cs 指定转换类型 + * @return 值 + */ + public default T getModel(String key, Class cs) { + return SaFoxUtil.getValueByType(get(key), cs); + } + + /** + * 取值 (指定转换类型, 并指定值为Null时返回的默认值) + * @param 泛型 + * @param key key + * @param cs 指定转换类型 + * @param defaultValue 值为Null时返回的默认值 + * @return 值 + */ + @SuppressWarnings("unchecked") + public default T getModel(String key, Class cs, Object defaultValue) { + Object value = get(key); + if(valueIsNull(value)) { + return (T)defaultValue; + } + return SaFoxUtil.getValueByType(value, cs); + } + + // 写值 & 其它 + + /** + * 写值 (只有在此 key 原本无值的情况下才会写入) + * @param key 名称 + * @param value 值 + * @return 对象自身 + */ + public default SaGetValueInterface setByNull(String key, Object value) { + if(has(key) == false) { + set(key, value); + } + return this; + } + + /** + * 是否含有某个key + * @param key has + * @return 是否含有 + */ + public default boolean has(String key) { + return !valueIsNull(get(key)); + } + + + + + // --------- 内部工具方法 + + /** + * 判断一个值是否为null + * @param value 指定值 + * @return 此value是否为null + */ + public default boolean valueIsNull(Object value) { + return value == null || value.equals(""); + } + + /** + * 根据默认值来获取值 + * @param 泛型 + * @param value 值 + * @param defaultValue 默认值 + * @return 转换后的值 + */ + @SuppressWarnings("unchecked") + public default T getValueByDefaultValue(Object value, T defaultValue) { + + // 如果 obj 为 null,则直接返回默认值 + if(valueIsNull(value)) { + return (T)defaultValue; + } + + // 开始转换 + Class cs = (Class) defaultValue.getClass(); + return SaFoxUtil.getValueByType(value, cs); + } + + +} diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java index 734e8d65..e49b97bc 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/session/SaSession.java @@ -10,7 +10,6 @@ import java.util.concurrent.ConcurrentHashMap; import cn.dev33.satoken.SaManager; import cn.dev33.satoken.dao.SaTokenDao; -import cn.dev33.satoken.fun.SaRetFunction; import cn.dev33.satoken.util.SaFoxUtil; /** @@ -19,7 +18,7 @@ import cn.dev33.satoken.util.SaFoxUtil; * @author kong * */ -public class SaSession implements Serializable { +public class SaSession implements SaGetValueInterface, Serializable { /** * @@ -287,139 +286,25 @@ public class SaSession implements Serializable { // ----------------------- 存取值 (类型转换) - // ---- 取值 + // ---- 实现接口存取值方法 + /** - * 取值 + * 取值 * @param key key * @return 值 */ + @Override public Object get(String key) { return dataMap.get(key); } - - /** - * - * 取值 (指定默认值) - * @param 默认值的类型 - * @param key key - * @param defaultValue 取不到值时返回的默认值 - * @return 值 - */ - public T get(String key, T defaultValue) { - return getValueByDefaultValue(get(key), defaultValue); - } /** - * - * 取值 (如果值为null,则执行fun函数获取值) - * @param 返回值的类型 - * @param key key - * @param fun 值为null时执行的函数 - * @return 值 - */ - @SuppressWarnings("unchecked") - public T get(String key, SaRetFunction fun) { - Object value = get(key); - if(value == null) { - value = fun.run(); - set(key, value); - } - return (T) value; - } - - /** - * 取值 (转String类型) - * @param key key - * @return 值 - */ - public String getString(String key) { - Object value = get(key); - if(value == null) { - return null; - } - return String.valueOf(value); - } - - /** - * 取值 (转int类型) - * @param key key - * @return 值 - */ - public int getInt(String key) { - return getValueByDefaultValue(get(key), 0); - } - - /** - * 取值 (转long类型) - * @param key key - * @return 值 - */ - public long getLong(String key) { - return getValueByDefaultValue(get(key), 0L); - } - - /** - * 取值 (转double类型) - * @param key key - * @return 值 - */ - public double getDouble(String key) { - return getValueByDefaultValue(get(key), 0.0); - } - - /** - * 取值 (转float类型) - * @param key key - * @return 值 - */ - public float getFloat(String key) { - return getValueByDefaultValue(get(key), 0.0f); - } - - /** - * 取值 (指定转换类型) - * @param 泛型 - * @param key key - * @param cs 指定转换类型 - * @return 值 - */ - public T getModel(String key, Class cs) { - return SaFoxUtil.getValueByType(get(key), cs); - } - - /** - * 取值 (指定转换类型, 并指定值为Null时返回的默认值) - * @param 泛型 - * @param key key - * @param cs 指定转换类型 - * @param defaultValue 值为Null时返回的默认值 - * @return 值 - */ - @SuppressWarnings("unchecked") - public T getModel(String key, Class cs, Object defaultValue) { - Object value = get(key); - if(valueIsNull(value)) { - return (T)defaultValue; - } - return SaFoxUtil.getValueByType(value, cs); - } - - /** - * 返回当前Session的所有key - * - * @return 所有值的key列表 - */ - public Set keys() { - return dataMap.keySet(); - } - - // ---- 其他 - /** - * 写值 + * 写值 * @param key 名称 * @param value 值 * @return 对象自身 */ + @Override public SaSession set(String key, Object value) { dataMap.put(key, value); update(); @@ -432,6 +317,7 @@ public class SaSession implements Serializable { * @param value 值 * @return 对象自身 */ + @Override public SaSession setByNull(String key, Object value) { if(has(key) == false) { dataMap.put(key, value); @@ -440,15 +326,8 @@ public class SaSession implements Serializable { return this; } - /** - * 是否含有某个key - * @param key has - * @return 是否含有 - */ - public boolean has(String key) { - return !valueIsNull(get(key)); - } - + // ---- 其它方法 + /** * 删值 * @param key 要删除的key @@ -468,6 +347,15 @@ public class SaSession implements Serializable { update(); } + /** + * 返回当前Session的所有key + * + * @return 所有值的key列表 + */ + public Set keys() { + return dataMap.keySet(); + } + /** * 获取数据挂载集合(如果更新map里的值,请调用session.update()方法避免产生脏数据 ) * @@ -487,144 +375,4 @@ public class SaSession implements Serializable { this.update(); } - - // --------- 工具方法 - - /** - * 判断一个值是否为null - * @param value 指定值 - * @return 此value是否为null - */ - public boolean valueIsNull(Object value) { - return value == null || value.equals(""); - } - - /** - * 根据默认值来获取值 - * @param 泛型 - * @param value 值 - * @param defaultValue 默认值 - * @return 转换后的值 - */ - @SuppressWarnings("unchecked") - protected T getValueByDefaultValue(Object value, T defaultValue) { - - // 如果 obj 为 null,则直接返回默认值 - if(valueIsNull(value)) { - return (T)defaultValue; - } - - // 开始转换 - Class cs = (Class) defaultValue.getClass(); - return SaFoxUtil.getValueByType(value, cs); - } - - - - - // ----------------------- 旧API - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.set(key)

- * 写入一个值 - * - * @param key 名称 - * @param value 值 - */ - @Deprecated - public void setAttribute(String key, Object value) { - dataMap.put(key, value); - update(); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.get(key)

- * 取出一个值 - * - * @param key 名称 - * @return 值 - */ - @Deprecated - public Object getAttribute(String key) { - return dataMap.get(key); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.get(key, defaultValue)

- * 取值,并指定取不到值时的默认值 - * - * @param key 名称 - * @param defaultValue 取不到值的时候返回的默认值 - * @return value - */ - @Deprecated - public Object getAttribute(String key, Object defaultValue) { - Object value = getAttribute(key); - if (value != null) { - return value; - } - return defaultValue; - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.delete(key)

- * 移除一个值 - * - * @param key 要移除的值的名字 - */ - @Deprecated - public void removeAttribute(String key) { - dataMap.remove(key); - update(); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.clear()

- * 清空所有值 - */ - @Deprecated - public void clearAttribute() { - dataMap.clear(); - update(); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.has(key)

- * 是否含有指定key - * - * @param key 是否含有指定值 - * @return 是否含有 - */ - @Deprecated - public boolean containsAttribute(String key) { - return dataMap.containsKey(key); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.keys()

- * 返回当前session会话所有key - * - * @return 所有值的key列表 - */ - @Deprecated - public Set attributeKeys() { - return dataMap.keySet(); - } - - /** - *

此函数设计已过时,未来版本可能移除此类,请及时更换为: session.setByNull(),用法保持不变

- * 写值(只有在此key原本无值的时候才会写入) - * @param key 名称 - * @param value 值 - * @return 对象自身 - */ - @Deprecated - public SaSession setDefaultValue(String key, Object value) { - if(has(key) == false) { - dataMap.put(key, value); - update(); - } - return this; - } - }