Package cn.cloudself.query.util.ext
Class EntityProxy<RES>
- java.lang.Object
-
- cn.cloudself.query.util.ext.EntityProxy<RES>
-
public abstract class EntityProxy<RES> extends Object
Bean代理, 支持生成三种类型的数据:- Map
- 基本对象
- JavaBean
BeanProxy的主要目的是虚拟出一个对象.
Usages:
- 使用
EntityProxy.fromClass(Class)或EntityProxy.fromBean(BEAN)构造该对象 - 使用
EntityProxy.newInstance()创建临时对象EntityProxy.BeanInstance - 使用
EntityProxy.BeanInstance.EntityProxy.BeanInstance.setProperty(java.lang.String, java.lang.Object)设置目标对象的属性 - 使用
EntityProxy.BeanInstance.EntityProxy.BeanInstance.getPropertyType(java.lang.String)获取目标某字段的类型 - 使用
EntityProxy.BeanInstance.EntityProxy.BeanInstance.toBean()将临时对象转为目标对象
注意点:
内置一个HashMap<Class, EntityProxy>作为缓存,该缓存是不会自动垃圾回收,常规场景(例如SpringBoot)下不会存在问题,因为
- 虚拟机本来就很少回收.class对象, 往往发生回收(FullGC)时,内存已经不足了,该优化了
- 本身Entity.class对象和EntityProxy不会占用很多内存。
但是以下场景需要手动清空缓存:
- Entity是动态生成的,而且很多
- 单Tomcat存在多个应用,且应用存在退出行为,而此时,Tomcat容器仍在运行。该场景可以实现ServletContextListener,在contextDestroyed时调用EntityProxy.removeCaches(k -> true)清空缓存
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classEntityProxy.BeanInstance<BEAN,RES>static classEntityProxy.ParserEntity or Bean's parser
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static voidflushCaches(Class<?>... classes)static voidflushCaches(Predicate<? super Class<?>> filter)static <BEAN> EntityProxy.BeanInstance<BEAN,BEAN>fromBean(BEAN instance)构造一个BeanInstancestatic <M extends Map<? super String,?>,BEAN>
EntityProxy.BeanInstance<BEAN,M>fromBean(M instance, Class<BEAN> refer)构造一个BeanInstancestatic <T> EntityProxy<T>fromClass(Class<T> clazz)abstract EntityProxy.BeanInstance<RES,RES>newInstance()abstract <INSTANCE> EntityProxy.BeanInstance<RES,INSTANCE>newInstance(INSTANCE instance)EntityProxy.BeanInstance<RES,Map<String,Object>>newMapInstance()<M extends Map<? super String,?>>
EntityProxy.BeanInstance<RES,M>newMapInstance(M map)
-
-
-
Method Detail
-
fromClass
@NotNull public static <T> EntityProxy<T> fromClass(@NotNull Class<T> clazz)
-
fromBean
public static <BEAN> EntityProxy.BeanInstance<BEAN,BEAN> fromBean(BEAN instance)
构造一个BeanInstance- Parameters:
instance- 只能为`Java Bean`, 不能为`Map`, 如需为`Map`, 参考fromBean(Map, Class)
-
fromBean
public static <M extends Map<? super String,?>,BEAN> EntityProxy.BeanInstance<BEAN,M> fromBean(M instance, Class<BEAN> refer)
构造一个BeanInstance- Parameters:
instance- 可以为Map或者JavaBeanrefer- 该Map参考的`Bean Class`
-
newInstance
public abstract EntityProxy.BeanInstance<RES,RES> newInstance()
-
newInstance
public abstract <INSTANCE> EntityProxy.BeanInstance<RES,INSTANCE> newInstance(INSTANCE instance)
-
newMapInstance
public <M extends Map<? super String,?>> EntityProxy.BeanInstance<RES,M> newMapInstance(M map)
-
newMapInstance
public EntityProxy.BeanInstance<RES,Map<String,Object>> newMapInstance()
-
flushCaches
public static void flushCaches(Class<?>... classes)
-
-