看得觉得不错,所以试了一下,记一下
要有:
springframework.aop 3.1m2
springframework.context 3.1m2
springframework.aspects 3.1m2
和一个
aopalliance-1.0.jar
这个spring的文档里没提,本来以为有spring的包就行了
配置文件applictionContext-cache.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <cache:annotation-driven /> <!-- generic cache manager --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="caches"> <set> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/> <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="books"/> </set> </property> </bean> </beans>
只是从原例子上抄的,以后可以自己改
这次想缓存的是DAO类的一个方法,试想如果是hibernate,应该不用在这儿进行缓存吧。
@Cacheable(value="books",key="#checkonworkattendance.getAttendanceYear()+#checkonworkattendance.getAttendanceMonth()") public List viewCheckonworkattendance( Checkonworkattendance checkonworkattendance) throws CheckonworkattendanceException {
这里遇到的问题是,尽量使用某一数值为key,否则可能是以OBJECT.toString的方式来作为key, 这样就可能缓存method了。
KEY可以用所谓SpEL方式写,我也就是试写了一个吧,要多个参数组合。
试验时,在类内做断点,只运行一次,再运行时会自动跳过,从cache中取了。
这样对于非hibernate的简易查询,也可以在数据层面进行缓存了。
另,没看到除了annotation方式外的配置方法,因为是想对原有代码进行AOP方式的调教,所以如果能以antmatcher的**方式进行配置就好了。再看