SaSession 读写值抽取公共接口

This commit is contained in:
click33 2022-08-16 09:40:16 +08:00
parent 429303c857
commit 9713b4fe26
2 changed files with 221 additions and 271 deletions

View File

@ -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 <T> 默认值的类型
* @param key key
* @param defaultValue 取不到值时返回的默认值
* @return
*/
public default <T> T get(String key, T defaultValue) {
return getValueByDefaultValue(get(key), defaultValue);
}
/**
*
* 取值 (如果值为 null则执行 fun 函数获取值并把函数返回值写入缓存)
* @param <T> 返回值的类型
* @param key key
* @param fun 值为null时执行的函数
* @return
*/
@SuppressWarnings("unchecked")
public default <T> 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 <T> 泛型
* @param key key
* @param cs 指定转换类型
* @return
*/
public default <T> T getModel(String key, Class<T> cs) {
return SaFoxUtil.getValueByType(get(key), cs);
}
/**
* 取值 (指定转换类型, 并指定值为Null时返回的默认值)
* @param <T> 泛型
* @param key key
* @param cs 指定转换类型
* @param defaultValue 值为Null时返回的默认值
* @return
*/
@SuppressWarnings("unchecked")
public default <T> T getModel(String key, Class<T> 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 <T> 泛型
* @param value
* @param defaultValue 默认值
* @return 转换后的值
*/
@SuppressWarnings("unchecked")
public default <T> T getValueByDefaultValue(Object value, T defaultValue) {
// 如果 obj null则直接返回默认值
if(valueIsNull(value)) {
return (T)defaultValue;
}
// 开始转换
Class<T> cs = (Class<T>) defaultValue.getClass();
return SaFoxUtil.getValueByType(value, cs);
}
}

View File

@ -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 <T> 默认值的类型
* @param key key
* @param defaultValue 取不到值时返回的默认值
* @return
*/
public <T> T get(String key, T defaultValue) {
return getValueByDefaultValue(get(key), defaultValue);
}
/**
*
* 取值 (如果值为null则执行fun函数获取值)
* @param <T> 返回值的类型
* @param key key
* @param fun 值为null时执行的函数
* @return
*/
@SuppressWarnings("unchecked")
public <T> 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 <T> 泛型
* @param key key
* @param cs 指定转换类型
* @return
*/
public <T> T getModel(String key, Class<T> cs) {
return SaFoxUtil.getValueByType(get(key), cs);
}
/**
* 取值 (指定转换类型, 并指定值为Null时返回的默认值)
* @param <T> 泛型
* @param key key
* @param cs 指定转换类型
* @param defaultValue 值为Null时返回的默认值
* @return
*/
@SuppressWarnings("unchecked")
public <T> T getModel(String key, Class<T> cs, Object defaultValue) {
Object value = get(key);
if(valueIsNull(value)) {
return (T)defaultValue;
}
return SaFoxUtil.getValueByType(value, cs);
}
/**
* 返回当前Session的所有key
*
* @return 所有值的key列表
*/
public Set<String> 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<String> 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 <T> 泛型
* @param value
* @param defaultValue 默认值
* @return 转换后的值
*/
@SuppressWarnings("unchecked")
protected <T> T getValueByDefaultValue(Object value, T defaultValue) {
// 如果 obj null则直接返回默认值
if(valueIsNull(value)) {
return (T)defaultValue;
}
// 开始转换
Class<T> cs = (Class<T>) defaultValue.getClass();
return SaFoxUtil.getValueByType(value, cs);
}
// ----------------------- 旧API
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.set(key) </h1>
* 写入一个值
*
* @param key 名称
* @param value
*/
@Deprecated
public void setAttribute(String key, Object value) {
dataMap.put(key, value);
update();
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.get(key) </h1>
* 取出一个值
*
* @param key 名称
* @return
*/
@Deprecated
public Object getAttribute(String key) {
return dataMap.get(key);
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.get(key, defaultValue) </h1>
* 取值并指定取不到值时的默认值
*
* @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;
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.delete(key) </h1>
* 移除一个值
*
* @param key 要移除的值的名字
*/
@Deprecated
public void removeAttribute(String key) {
dataMap.remove(key);
update();
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.clear() </h1>
* 清空所有值
*/
@Deprecated
public void clearAttribute() {
dataMap.clear();
update();
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.has(key) </h1>
* 是否含有指定key
*
* @param key 是否含有指定值
* @return 是否含有
*/
@Deprecated
public boolean containsAttribute(String key) {
return dataMap.containsKey(key);
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.keys() </h1>
* 返回当前session会话所有key
*
* @return 所有值的key列表
*/
@Deprecated
public Set<String> attributeKeys() {
return dataMap.keySet();
}
/**
* <h1> 此函数设计已过时未来版本可能移除此类请及时更换为: session.setByNull()用法保持不变 </h1>
* 写值(只有在此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;
}
}