三门县住房和城乡建设规划局网站,唐山注册公司需要多少钱,郴州,购物网站php源代码aoocache发布第一个版本0.1.0时#xff0c;没有考虑到使用aocache的项目对方法缓存的控制需求。
场景
给同事做培训时#xff0c;同事提到这个需求#xff0c;他希望能够有方法主动去清理指定方法的缓存#xff1a; 他的数据是由其他服务启动时提供的#xff0c;他的方法…aoocache发布第一个版本0.1.0时没有考虑到使用aocache的项目对方法缓存的控制需求。
场景
给同事做培训时同事提到这个需求他希望能够有方法主动去清理指定方法的缓存 他的数据是由其他服务启动时提供的他的方法要根据这些数据进行复杂计算返回结果。 如果其他服务重启了会刷新这些数据如果使用aocache提供的方法缓存机制他就需要有办法能清理这些缓存。 缓存控制
我觉得这个需求很合理有普遍性于是在最新版本0.4.0增加了缓存控制机制. 以两种方法提供缓存清理功能
直接方法调用方式注解方式
clear()
aocache提供以下两个clear方法直接清除指定方法/构造方法的调用缓存 /*** 清除{link Member}对应的缓存为{code null}或不存在对应的缓存忽略* param member*/public void clear(Member member);/*** 清除{link Member}对应的缓存为{code null}或不存在对应的缓存忽略* param member* throws NoSuchMethodException 没有找到指定的方法/构造方法*/public void clear(Class?clazz,String methodName, Class?[]parameterTypes);AoClear
aocache提供还提供了通过AoClear注解清除缓存的形式将注解定义在返回类型为void或boolean类型的方法上调用该方法就会自动清除缓存。
如下AoClear各字段用于定义要清除缓存的目标方法(Method)或构造方法(Constructor)
字段名默认值说明targetClassObject.class目标方法(Method)或构造方法(Constructor)所属的类methodName空方法名为空则清除缓存的目标为构造方法(Constructor)parameterTypesClass?[]方法或构造方法的参数类型数组 支持在同一个方法上定义多个AoClear注解清除多个方法或构造方法的缓存 清理缓存的切入点在方法调用正常返回时 (AfterReturning)。
如果AoClear注解定义在返回类型非boolean的类型方法上即为强制清理模式方法返回时直接执行清理动作。
如果AoClear注解定义在返回类型为boolean的类型方法上即为灵活清理模式方法返回时返回值为true时才执行清理动作。 AoCacheablepublic D extends Date D parseDateString(String dateStr, ClassD targetClass) {return DateSupport.parseDateString(dateStr,targetClass);}AoCacheablepublic D extends Date D parseDateString2(String dateStr, ClassD targetClass) {return DateSupport.parseDateString(dateStr,targetClass);}/**** 多注解支持清理多个缓存*/AoClears({AoClear(methodName parseDateString,parameterTypes {String.class,Class.class}),AoClear(methodName parseDateString2,parameterTypes {String.class,Class.class}) })private void clearForce() {}AoClear(methodName parseDateString,parameterTypes {String.class,Class.class})private boolean clearTrue() {return true;}AoClear(methodName parseDateString,parameterTypes {String.class,Class.class})private boolean clearFalse() {return false;}对于我的同事来说注解方式更合适他他可以将AoClear注解加在服务心跳侦听器方法上只要其他服务重新上线就自动实现缓存清理除了注解不用多写一行代码。
aoacahe快速入门
关于aocache的使用参见之前的博客《java:aocache:基于aspectJ实现的方法缓存工具》
完整示例
完整的示例参见示例项目 aocache-example的代码
aocache-example-ctw/src/test/java/com/gitee/l0km/aocache/example/ctw/AocacheCtwClearTest.java的test1Timecost()测试方法