dao设计(三),缓存AOP拦截处理的几个思考

2024-08-31 05:38

本文主要是介绍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拦截处理的几个思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123045

相关文章

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

SpringSecurity中的跨域问题处理方案

《SpringSecurity中的跨域问题处理方案》本文介绍了跨域资源共享(CORS)技术在JavaEE开发中的应用,详细讲解了CORS的工作原理,包括简单请求和非简单请求的处理方式,本文结合实例代码... 目录1.什么是CORS2.简单请求3.非简单请求4.Spring跨域解决方案4.1.@CrossOr

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

C# 空值处理运算符??、?. 及其它常用符号

《C#空值处理运算符??、?.及其它常用符号》本文主要介绍了C#空值处理运算符??、?.及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录一、核心运算符:直接解决空值问题1.??空合并运算符2.?.空条件运算符二、辅助运算符:扩展空值处理

浅析Python中如何处理Socket超时

《浅析Python中如何处理Socket超时》在网络编程中,Socket是实现网络通信的基础,本文将深入探讨Python中如何处理Socket超时,并提供完整的代码示例和最佳实践,希望对大家有所帮助... 目录开篇引言核心要点逐一深入讲解每个要点1. 设置Socket超时2. 处理超时异常3. 使用sele

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat