一种基于aop技术缓存函数执行结果的方法及系统的制作方法

文档序号:6432890研发日期:2011年阅读:242来源:国知局
技术简介:
本发明解决传统缓存机制与业务逻辑耦合度高、灵活性差的问题,通过AOP技术实现缓存功能解耦。利用特征码生成机制将函数执行结果与唯一标识关联,并通过Spring AOP在函数前后插入缓存处理通知,实现结果缓存或清除。更新操作触发清除通知,批量清理相关缓存数据,使缓存功能可插拔配置。
关键词:缓存机制,AOP技术,函数执行结果
专利名称:一种基于aop技术缓存函数执行结果的方法及系统的制作方法
技术领域
本发明涉及计算机信息处理、软件开发领域,具体涉及一种基于A0P(AspeCt Oriented Programming,面向方面编程)技术缓存函数执行结果的方法及系统。
背景技术
在软件开发过程中,函数是程序的最小单元,大的软件系统都是由许多函数依据 一定的业务逻辑组装而成,函数的执行速度决定了整个软件系统的运行效率。通常情况下, 函数被调用时依据程序逻辑从函数开头执行整个函数体,从而得到整个函数的计算结果, 这在数据变化快的场合是完全必要的。但是在一些应用场合,如企业业务系统中的系统数 据像组织机构、人员及权限数据等,这些数据通常保存在关系数据库系统中,一般情况下这 些数据很长时间不会被改变。只要数据不改变多次查询相关信息得到的结果往往是相同 的,一些操作比较消耗计算机资源,重复相同的操作对性能影响很大,使用系统的人越多、 应用系统运行越慢。在软件设计中缓存技术广泛采用,但是目前的缓存技术适用于粗粒度 数据的缓存,如上述组织机构信息,通常都是在系统启动时将所有数据一次性读入缓存;但 是对于一些细粒度数据像权限数据,每个用户、每个角色、针对不同的操作对象权限都不一 样,一些权限需要进行复杂的运算才能得到,类似这样的数据难以做到一次性将所有数据 加载到缓存中。另外,目前的缓存都是硬编码在业务逻辑功能模块的程序代码中,为了追加 缓存功能,需要对应用程序代码进行修改,这样缓存功能模块和业务逻辑功能模块紧密耦 合,如果要追加缓存功能或去掉缓存功能均要修改程序,重新编译和调试,费时费力,非常 不方便。发明内容
为了解决现有缓存技术存在的难以对细粒度数据进行缓存以及缓存处理功能模 块和业务逻辑功能模块紧密耦合的问题,本发明的目的在于提供一种基于AOP技术缓存函 数执行结果的方法及系统,从而实现企业应用系统数据细粒度的缓存,大幅度的提高系统 运行性能,使得业务系统使用的人越多,被缓存的数据就越多,系统运行地越快。
为实现上述目的,本发明采用的技术方案如下
一种基于AOP技术缓存函数执行结果的方法,包括以下步骤
步骤1、调用业务逻辑处理函数,并由特征码生成装置生成该业务逻辑处理函数唯 一的实例特征码;
步骤2、根据业务逻辑处理函数的实例特征码,在数据缓存装置中检索是否存在该 函数的函数执行结果,若是则进入步骤3,若否则进入步骤4 ;
步骤3、从数据缓存装置中得到缓存的函数执行结果,进入步骤5 ;
步骤4、执行所述业务逻辑处理函数,并将得到的函数执行结果缓存到数据缓存装 置;
步骤5、将函数执行结果返回给业务逻辑处理函数的调用方。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,如果步骤I中所 调用的业务逻辑处理函数为更新目标数据的函数,会将数据缓存装置中该函数所在类对应 的缓存数据进行清除。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,清除函数所在 类对应的缓存数据的具体步骤为
I)调用修改目标数据的业务逻辑处理函数;
2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数所在类 名;
3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每个函数实 例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓存装置中以被执行函数 所在类名开头的实例特征码所对应的缓存数据。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤I中,所述 业务逻辑处理函数为面向对象开发语言Java语言的对象成员函数。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤I中,实例 特征码是根据函数实例的类名、函数名和参数信息生成的,以类名开头的唯一的函数实例 特征码。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,所述参数是 Java语言的基本数据类型、数组或对象类型,参数的个数为一个、多个或者没有。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,在数据缓存装 置中检索函数执行结果是以函数的实例特征码为依据进行的,在缓存时是以实例特征码为 主键将函数执行结果存入到数据缓存装置的。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,步骤4中,当业 务逻辑处理函数的处理结果为有效数据类型的返回值时,才对函数执行结果进行缓存;所 述有效数据类型是指Java语言中的除void和Void类型之外的数据类型。
再进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,所述更新目 标数据的函数包括追加函数、修改函数或删除函数。
更进一步,如上所述的一种基于AOP技术缓存函数执行结果的方法,在对业务逻 辑处理函数的函数执行结果进行缓存或者对更新目标数据的函数清除缓存数据时,需要在 Spring配置文件中将此函数的函数名设置为切入点,并在切入点进行函数执行结果的缓存 或者缓存数据的清除。
一种基于AOP技术缓存函数执行结果的系统,包括
特征码生成装置用于生成所调用的业务逻辑处理函数的唯一的函数实例特征 码;
数据缓存装置用于保存函数执行结果;
缓存处理通知装置用于在数据缓存装置中检索是否存在实例特征码所对应的函 数执行结果;若是则从数据缓存装置获得该实例特征码对应的执行结果并返回给调用方; 若否则执行业务逻辑处理函数,将函数执行结果保存到数据缓存装置中,并将函数执行结 果返回给调用方;
缓存清除通知装置用于在业务逻辑处理函数为更新目标数据的函数时,清除数据缓存装置中该函数所在类对应的缓存数据。
进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,所述函数实例 特征码是根据所调用的业务逻辑处理函数的函数实例的类名、函数名及参数信息生成的, 以类名开头的唯一的函数实例特征码。
再进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,对缓存处理 通知装置或缓存清除通知装置,需要在Spring配置文件中将要调用的业务逻辑处理函数 的函数名设置为切入点,并在此切入点执行数据的缓存或清除。
更进一步,如上所述的一种基于AOP技术缓存函数执行结果的系统,在缓存处理 通知装置进行数据的检索是以实例特征码为依据进行的,在缓存时是以实例特征码为主键 将函数执行结果保存到数据缓存装置中的。
本发明的效果在于
1.模块解耦采用本发明,缓存处理功能模块和业务逻辑功能模块完全独立,通 过Spring配置文件的修改即可将缓存处理功能模块应用到业务逻辑功能模块中,也可以 在Spring配置文件中设置对哪些对象、对象的哪些成员函数的执行结果进行缓存。
2.实现细粒度数据的缓存以函数名和函数参数值为基础进行缓存,做到了细粒 度数据的缓存,避免了现有技术只能对粗粒度数据进行缓存的弊端。
3.随需缓存不同于现有缓存技术一次性将所有系统数据加载到缓存中占用计 算机内存资源的落后方法,本发明提供随需缓存技术,函数在未被执行时不会缓存任何数 据,在被执行时才将满足参数要求的执行结果缓存在计算机内存中。


图1为本发明一种基于AOP技术缓存函数执行结果的系统的结构框图2为本发明一种基于AOP技术缓存函数执行结果的方法的流程图3为具体实施方式
中缓存处理通知装置的工作流程图4为具体实施方式
中缓存清除通知装置的工作流程图。
具体实施方式
本发明提供了一种基于AOP技术缓存函数执行结果的方法及系统,通过该方法及 系统能够实现企业应用系统数据细粒度的缓存、通过该技术的应用,可以大幅度的提高系 统运行性能,使得业务系统使用的人越多,被缓存的数据就越多,系统运行地越快。
下面结合说明书附图与具体实施方式
对本发明做进一步的详细说明。
图1示出了本发明具体实施方式
中提供的一种基于AOP技术缓存函数执行结果 的系统的结构框图,由图中可以看出该系统主要包括数据缓存装置12、缓存处理通知装置 13、缓存清除通知装置14和特征码生成装置11 ;其中
特征码生成装置11 :用于生成所调用的业务逻辑处理函数的唯一的函数实例特 征码;
数据缓存装置12 :用于保存函数执行结果;缓存处理通知装置13和缓存清除通知 14共用相同的数据缓存装置12 ;
缓存处理通知装置13 :用于在数据缓存装置12中检索是否存在实例特征码所对应的函数执行结果;若是,则在数据缓存装置获得该实例特征码对应的执行结果并返回给 调用方;若否,则执行业务逻辑处理函数,将函数执行结果保存到数据缓存装置中,并将函 数执行结果返回给调用方;缓存处理通知装置13的具体工作流程如图3所示;
其中,缓存处理通知装置13进行数据的检索是以实例特征码为依据进行的,在缓 存时是以实例特征码为主键将函数执行结果保存到数据缓存装置12中的。
缓存清除通知装置14 :用于在业务逻辑处理函数为更新目标数据的函数时,清除 数据缓存装置中该函数所在类对应的缓存数据。
由于本发明中的业务逻辑处理函数是面向对象开发语言Java语言的对象成员函 数,对缓存处理通知装置和缓存清除通知装置,需要在Spring配置文件中将要调用的业务 逻辑处理函数的函数名设置为切入点,并在此切入点执行数据的缓存或清除。在AOP编程 中,需要在配置文件中为程序设置切入点(Pointcut),程序执行到切入点后,会调用在这个 切入点上设置的通知,通知是外部的程序代码,如本发明的缓存处理通知和缓存清除通知。
图2示出了基于图1中一种基于AOP技术实现函数执行结果缓存的系统的基于 AOP技术实现函数执行结果缓存的方法的流程图,由图中可以看出,该方法主要包括以下步 骤
步骤S21、调用业务逻辑处理函数,生成实例特征码;
调用业务逻辑处理函数,并由特征码生成装置11生成该业务逻辑处理函数的唯 一的实例特征码。
函数调用实际上就是函数原型实例化的过程,将一次函数调用称为函数实例化, 函数实例以类名、函数名及传入的参数列表区分其唯一性。特征码生成装置11根据函数实 例的类名、函数名及参数列表信息生成一个唯一的函数实例特征码。由于函数的实例特征 码都是唯一的,所以在数据缓存装置12中检索函数执行结果是以函数的实例特征码为依 据进行的,在缓存时是以实例特征码为主键将函数执行结果存入到数据缓存装置的。在操 作过程中,就可以通过该特征码查询其对应的函数执行结果。
其中,本发明的业务逻辑处理函数为面向对象开发语言Java语言的对象成员函 数。参数列表中的参数是Java语言的基本数据类型、数组或对象类型。在实际的操作过程 中,函数可以不带参数,或者带一个或者多个参数。
步骤S22、根据实例特征码检索函数执行结果;
根据业务逻辑处理函数的实例特征码,在数据缓存装置12中检索是否存在该函 数的函数执行结果,若是则进入步骤S23,若否则进入步骤S24。由步骤S21中可知,每一个 业务逻辑处理函数都有其唯一的实例特征码,根据该实例特征码,用户可以在数据缓存装 置中查找是否存在该实例特征码所对应的函数的执行结果。
步骤S23、获取函数执行结果;
如果在此次调用执行步骤S21中的业务逻辑处理函数之前,已经执行过相同的函 数实例,此次调用则不需要再执行相应的业务逻辑处理函数,在步骤S22中就可以通过在 数据缓存装置12中检索得到实例特征码所对应的函数的执行结果,进入步骤S25。
步骤S24、执行业务逻辑处理函数,获取并保存函数执行结果;
如果在此次调用执行步骤S21中的业务逻辑处理函数之前,没有执行过相同的函 数实例,就需要执行所述业务逻辑处理函数,并将得到的函数执行结果缓存到数据缓存装置12中,在下次执行该函数实例时,就可以根据唯一的实例特征码直接在数据缓存装置12 中检索得到其函数执行结果。
其中,在对业务逻辑处理函数的函数执行结果进行缓存时,需要在Spring配置文 件中将函数的函数名设置为切入点,并在此切入点进行函数执行结果的缓存。此外,业务逻 辑函数的处理结果必须为有效数据类型(除void类型和Void之外的数据类型,例如java 语言基本类型int型、float型等,或者对象类型String类型等)的返回值时,才对函数执 行结果进行缓存。
步骤S25、将函数执行结果返回给业务逻辑处理函数的调用方。
将步骤S23或者步骤S24中得到的函数执行结果返回给调用方。
对于本发明的上述方法,如果步骤S21中业务系统调用了更新目标数据的业务逻 辑处理函数时,如追加、修改或删除等函数时,将导致缓存的目标数据出现变化,数据缓存 装置12中的数据将失效,此时,缓存清除通知装置就会清空数据缓存中相应类对应的缓存 数据,其中清除缓存数据的具体步骤如图4所示
I)调用修改目标数据的业务逻辑处理函数;
2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数所在类 名;
3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每个函数实 例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓存装置中以被执行函数 所在类名开头的实例特征码所对应的缓存数据。
同样的,在对更新目标数据的函数清除数据时,需要在Spring配置文件中将此函 数的函数名设置为切入点,并在此切入点执行数据的清除。
下面结合具体的实施例对本发明进行进一步详细的说明。
本实施例采用Java语言提供的HashMap作为数据缓存装置,在Spring配置文件 中定义HashMap的配置如下
〈bean id=" cacheMap" class = " java. util. HashMap" />
本发明实施例提供的缓存处理通知装置(Advice)为Spring AOP的Interception Around通知,实现该通知需要做以下操作
1.实现Spring的MethodInterceptor接口,本实施例将缓存处理通知装置命名为 CacheInterceptor0
2.在Spring配置文件中定义缓存处理通知装置的配置如下
<bean id="cache Interceptor" class="CacheInterceptor"> 〈property name=丨丨cache丨丨><ref local=丨丨cacheMap丨丨 /></property〉</bean>
上面的配置缓存处理通知装置cachelnterceptor引用了前面定义的cacheMap数 据缓存装置,将会把数据缓存在cacheMap中。
3.在Spring配置文件中通过RegexpMethodPointcutAdvisor将缓存处理通知装置配置进切入点
<bean id="cacheAdviser" class=norg. springframework. aop. support. RegexpMethodPointcutAdvisor"> 〈property name=丨丨advice丨丨〉<ref IocaI = "cachelnterceptor" /></property〉
〈property name=丨丨patterns丨丨〉<1 is t><value>. *f ind. *</value><value>. *get. *</value></list></property〉</bean>
上面配置的cacheAdviser表不cachelnterceptor将拦截对象成员函数名中含 “find”和“get”的函数。
本发明实施例提供的缓存清除通知装置(Advice)为Spring AOP的After Returning通知,实现该通知需要做以下操作
1.实现Spring的AfterReturningAdvice接口,本实施例将缓存清除通知装置命 名为 CacheClearAdvice。
2.在Spring配置文件中定义缓存清除通知装置的配置如下
<bean id="cacheClearAdvice" class=丨丨CacheClearAdvice丨丨> 〈property name=丨丨cache丨丨><ref local=丨丨cacheMap丨丨 /></property〉</bean>
上面配置的缓存清除通知装置cacheClearAdvice引用了前面定义的cacheMap数 据缓存装置,将会把cacheMap中相应类缓存的数据清除。
3.在Spring配置文件中通过RegexpMethodPointcutAdvisor将缓存清除通知装置配置进切入点
<bean id="clearAdviser"class== "org. springframework. aop. support. RegexpMethodPointcutAdvisor">〈property name=丨丨advice丨丨〉<ref local =丨丨cacheClearAdvice" /></property〉〈property name=丨丨patterns丨丨〉<1 is t>
<value>. *add. *</value><value>. *update. *</value><value>.*delete. *</value></list></property〉</bean>
上面配置的clearAdviser表示cacheClearAdvice将拦截对象成员函数名中含“add”、‘'‘update” 和 “delete” 的函数。
下面通过Spring配置文件对业务逻辑模块StudentDao的函数实现缓存功能,StudentDao有下面三个成员函数
public List getStudentListO ;
public Student getStudent(String name);
public void deleteStudent(String name);
在Spring配置文件中追加StudentDao的配置,如下
〈bean id =" studentDao" class = " StudentDao" />
在Spring配置文件中通过自动代理,将缓存处理cacheAdviser和缓存清除clearAdviser应用到上面的studentDao对象,配置如下
<bean id="cacheProxy" class=丨丨 org. spr ingf ramework. aop. f ramework. autoproxy. BeanNameAutoProxyCreator 丨丨>〈property name="proxyTargetClass" value=丨丨true丨丨/>〈property name=丨丨beanNames丨丨><list><value>s tudentDao</value></list></property〉〈property name="interceptorNames"><list>
<value>cacheAdviser</value><value>clearAdviser</value></list></property〉</bean>
在进行上述配置后,在执行StudentDao的getStudentList O函数时会先通过缓 存处理通知装置从数据缓存装置查询执行结果,如果存在则直接将结果返回给函数调用 方,无需实际执行getStudentList O函数;如果不存在则执行getStudentList O函数,并 将执行结果缓存在数据缓存装置中,在调用deleteStudent O删除一个学生后,学生列表 出现变化,缓存失效,缓存清除装置将会清除数据缓存装置中StudentDao类对应的数据。
实施例1
第一次调用StudentDao的getStudentList O成员函数的执行过程
步骤1、StudentDao 类的 getStudentList O 成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudentList O, 并获取该函数所在类名“StudentDao”、函数名“getStudentList”,本实施例不带参数, 函数实例特征码生成装置将函数名“getStudentList”作为函数实例字符串,通过散列 函数得到所述函数实例字符串的散列码“1713854531”,将类名“StudentDao”和散列码 “1713854531 ” 组合得到函数实例特征码 “ StudentDao 1713854531”;
步骤3、根据所述函数实例特征码“StUdentDa01713854531”在数据缓存装置 cacheMap中查询函数执行结果,由于函数第一次被执行,因此无法检索到执行结果;
步骤4、执行业务逻辑函数getStudentList O函数,从数据库读取数据;
步骤5、以所述函数实例特征码“StudentDaol713854531”为主键将函数执行结果 存入数据缓存装置cacheMap ;
步骤6、将执行结果返回给函数调用方。
第二次及第二次以上调用函数执行过程
步骤1、StudentDao 类的 getStudentList O 成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudentList O, 并获取所在类名“StudentDao”、函数名“getStudentList”,本实施例不带参数,函数实例 特征码生成装置将函数名“getStudentList”作为函数实例字符串,通过散列函数得到所述 函数实例字符串的散列码“ 1713854531”,将类名“StudentDao”和散列码“ 1713854531”组 合得到函数实例特征码“StudentDaol713854531” ;
步骤3、根据所述函数实例特征码“StUdentDa01713854531”在数据缓存装置 cacheMap中查询函数执行结果,由于函数已经被执行一次,因此可以在缓存中检索到第一 次执行结果;
步骤4、从数据缓存装置中获取缓存的函数执行结果;
步骤5、将步骤4得到的函数执行结果返回给函数调用方。
采用上述的一种基于AOP技术缓存函数执行结果的方法,在完成第一次函数执 行后,进行第二次及第二次以上的函数调用就不会实际执行getStudentList函数去数据 库读取数据而是直接从数据缓存装置获取数据,由于从内存读取比数据库磁盘读取性能更 高,通过缓存机制显著提高了函数执行效率。
实施例2
本发明实施例提供了带一个参数的函数的缓存机制。
第一次调用函数执行过程
步骤1、StudentDao 类的 getStudent ( “tom”)成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudent O,并获 取所在类名“StudentDao”、函数名“getStudent”以及参数“Tom”,函数实例特征码生成装 置将函数名“getStudent”和参数“Tom”组合得到函数实例字符串“getStudentTom”,通过 散列函数得到所述函数实例字符串的散列码“-1330179827”,将类名“StudentDao”和散列 码 “-1330179827” 组合得到函数实例特征码 “StudentDao-1330179827” ;
步骤3、根据所述函数实例特征码“StudentDao-1330179827”在数据缓存装置 cacheMap中查询函数执行结果,由于函数第一次被执行,因此无法检索到执行结果;
步骤4、执行getStudent ( “tom”)函数,从数据库读取“Tom”的相关信息,返回 Student 对象;
步骤5、以所述函数实例特征码“StudentDao-1330179827”为主键将函数执行结 果存入数据缓存装置cacheMap ;
步骤6、将执行结果返回给函数调用方。
第二次及第二次以上调用函数执行过程
步骤1、StudentDao 类的 getStudent ( “tom”)成员函数被调用;
步骤2、缓存处理通知装置拦截被调用的业务逻辑处理函数getStudentO,并获 取所在类名“StudentDao”、函数名“getStudent”以及参数“Tom”,函数实例特征码生成装 置将函数名“getStudent”和参数“Tom”组合得到函数实例字符串“getStudentTom”,通过 散列函数得到所述函数实例字符串的散列码“-1330179827”,将类名“StudentDao”和散列 码 “-1330179827” 组合得到函数实例特征码 “StudentDao-1330179827” ;
步骤3、根据所述函数实例特征码“StudentDao-1330179827”在数据缓存装置 cacheMap中查询函数执行结果,由于函数已经被执行一次,因此可以在缓存中检索到第一 次执行结果;
步骤4、从数据缓存装置中获取缓存的函数执行结果;
步骤5、将步骤4得到的函数执行结果返回给函数调用方。
实施例3
本发明实施例提供了业务逻辑删除方法使缓存数据失效的机制。
步骤1、业务逻辑删除方法deleteStudent ( “Tom”)被调用,由于“Tom”被删除, 这导致getStudentList O和getStudent ( “Tom”)函数的执行结果出现变化,缓存中的数 据将失效;
步骤2、Spring AOP执行完删除目标数据的方法后,将执行缓存清除通知装置,缓 存清除通知装置获取被执行函数所在类名“StudentDao” ;
步骤3、缓存清除通知装置清除数据缓存装置cacheMap键名以“StudentDao”开头 的数据。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围 之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种基于AOP技术缓存函数执行结果的方法,包括以下步骤步骤1、调用业务逻辑处理函数,并由特征码生成装置生成该业务逻辑处理函数唯一的实例特征码;步骤2、根据业务逻辑处理函数的实例特征码,在数据缓存装置中检索是否存在该函数的函数执行结果,若是则进入步骤3,若否则进入步骤4 ;步骤3、从数据缓存装置中得到缓存的函数执行结果,进入步骤5 ;步骤4、执行所述业务逻辑处理函数,并将得到的函数执行结果缓存到数据缓存装置;步骤5、将函数执行结果返回给业务逻辑处理函数的调用方。
2.如权利要求1所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于如果步骤I中所调用的业务逻辑处理函数为更新目标数据的函数,会将数据缓存装置中该函数所在类对应的缓存数据进行清除。
3.如权利要求2所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于清除函数所在类对应的数据的具体步骤为1)调用修改目标数据的业务逻辑处理函数;2)执行所调用的更新目标数据的业务逻辑处理函数,并获取被执行函数所在类名;3)获取数据缓存装置的函数实例特征码列表,将实例特征码列表中的每个函数实例特征码与步骤2)被执行函数所在类名进行对比,并删除数据缓存装置中以被执行函数所在类名开头的实例特征码所对应的缓存数据。
4.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于步骤I中,所述业务逻辑处理函数为面向对象开发语言Java语言的对象成员函数。
5.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于步骤I中,所述的实例特征码是根据函数实例的类名、函数名和参数信息生成的,以类名开头的唯一的函数实例特征码。
6.如权利要求5所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于所述参数是Java语言的基本数据类型、数组或对象类型,参数的个数为一个、多个或者没有。
7.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于在数据缓存装置中检索函数执行结果是以函数的实例特征码为依据进行的,在缓存时是以实例特征码为主键将函数执行结果存入到数据缓存装置的。
8.如权利要求1所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于步骤4中,当业务逻辑处理函数的处理结果为有效数据类型的返回值时,才对函数执行结果进行缓存。
9.如权利要求2所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于所述更新目标数据的函数包括追加函数、修改函数或删除函数。
10.如权利要求1或2或3所述的一种基于AOP技术缓存函数执行结果的方法,其特征在于如果要对业务逻辑处理函数的函数执行结果进行缓存或者对更新目标数据的函数进行数据清除,需要在Spring配置文件中将此函数的函数名设置为切入点,并在切入点进行函数执行结果的缓存或者缓存数据的清除。
11.一种基于AOP技术缓存函数执行结果的系统,包括特征码生成装置用于生成所调用的业务逻辑处理函数的唯一的实例特征码;数据缓存装置用于保存函数执行结果;缓存处理通知装置用于在数据缓存装置中检索是否存在实例特征码所对应的函数执行结果;若是则从数据缓存装置获得该实例特征码对应的执行结果并返回给调用方;若否则执行业务逻辑处理函数,将函数执行结果保存到数据缓存装置中,并将函数执行结果返回给调用方;缓存清除通知装置用于在业务逻辑处理函数为更新目标数据的函数时,清除数据缓存装置中该函数所在类对应的缓存数据。
12.如权利要求11所述的一种基于AOP技术缓存函数执行结果的系统,其特征在于所述函数实例特征码是根据所调用的业务逻辑处理函数的函数实例的类名、函数名及参数信息生成的,以类名开头的唯一的函数实例特征码。
13.如权利要求11或12所述的一种基于AOP技术缓存函数执行结果的系统,其特征在于对缓存处理通知装置和缓存清除通知装置,需要在Spring配置文件中将要调用的业务逻辑处理函数的函数名设置为切入点,并在此切入点执行数据的缓存或清除。
14.如权利要求11或12或13所述的一种基于AOP技术缓存函数执行结果的系统,其特征在于缓存处理通知装置进行数据的检索是以实例特征码为依据进行的,在缓存函数执行结果时是以实例特征码为主键将函数执行结果保存到数据缓存装置中的。
全文摘要
本发明公开了一种基于AOP技术缓存函数执行结果的方法及系统,该方法及系统利用Spring开发框架提供的AOP功能实现,在需要缓存执行结果的业务逻辑处理函数前后执行Spring AOP的缓存处理通知,拦截被执行的业务逻辑处理函数,将业务逻辑处理函数的执行结果存入数据缓存装置。另外,该方法在业务逻辑处理函数更新目标数据(如追加、修改、删除数据)之后执行Spring AOP的缓存清除通知,清空数据缓存装置的数据。使用该方法将缓存功能模块和业务逻辑功能模块彻底解耦,实现可插拔的缓存机制,灵活地通过配置文件给业务逻辑处理函数增加或去除缓存功能。
文档编号G06F9/44GK102999319SQ201110266778
公开日2013年3月27日 申请日期2011年9月9日 优先权日2011年9月9日
发明者乐以长, 梁学勇, 陈永华 申请人:北京大学, 北大方正集团有限公司, 方正国际软件(北京)有限公司
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!