本文主要是介绍dao设计(三),缓存AOP拦截处理的几个思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当我们发现我们可以用事件通知的方式来巧妙的实现缓存更新时,接下来需要考虑的就是如何用aop拦截方法并设置一些常量配置的问题了。
1. 首先考虑一个问题,例如每个DO实体对应key及缓存时间等配置我们是在启动初始化时全部设置好呢?还是在启动后动态设置? 个人认为,数量小可以在初始化设置,当量比较大或者在运行时很好获取时,运行时获取也是一个不错的选择。在此次缓存框架缓存配置信息我们采用了运行时设置,因为后续可以方便的实时获取并绑定到dao中。
2. 配置信息如何存放?由于配置信息是与DO实体对应的,最优雅的做法就是用注解了,我们关心的配置如下:
配置参数 | 参数意义 |
---|---|
cacheTime | 缓存时间 |
cacheObjectKey | 缓存key |
在对应的DO类上加上@Table(objCacheTime = xxxx)即可
3. aop拦截到dao层调用方法后,我们仅仅知道方法参数,方法名和返回值,具体的DO实体我们并不知道,要实现获取DO实体类的功能,虽然可以要求所有的dao都以DO实体+Dao字符串的方式实现,但并不友好,可以采用泛型类, XxDaoCacheImpl extends DomainObjectDaoCacheBase这样就可以很方便的获取了具体的DO类,并通过DO类获取上面的注解信息。
4. 配置信息获取后,后续也可能会有需要的地方,由于spring实例化一般是单例的,对于哪些不变的信息,我们可以直接设置为dao的一个变量,第一次获取后就直接赋值。如上面提到的配置,由于当前的MethodInvocation对象后续也会有用到的地方,由于参数等信息不同太多,则可以放到ThreadLocal中。
5. 对于之前提到缓存事件通知,cacheManager是与具体的dao绑定的,在aop拦截到查询方法时,如果没有设置绑定,则我们要根据@Event注解设置对应要绑定关系,Map<String, Set<String>>
,key为dao+事件类型,value为方法和参数名称。
这篇关于dao设计(三),缓存AOP拦截处理的几个思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!