用Spring和EHCache实现方法结果缓存所注意的问题

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

我们知道,Cache为ehcache.xml配置文件里面所定义的缓存类别,获取某一特定的缓存类别的方法如下:

Cache cache= cacheManager.getCache(cacheName);

cacheName为想获取的缓存类别名。然后象下面方法把某一对象放入上面定义的缓存:

cache.put(new Element(key,(Serializable)value));

key为 放入该缓存中的对象的索引值,value为放入该缓存中key所对应的对象。我们看到,放入缓存中的value必须序列化,Java原生类型 char、int ,原生类型的包装类String、Character、Integer、Number...和集合List的实现类ArrayList都已经实现了Serializable接口,它们都可以直接放到缓存中。这里要注意的是,在方法返回值中经常用到的Iterator,并没有实现Serializable接口,所以Cache 不能缓存返回值类型为Iterator的方法。

还有一点要注意的是,如果我们要做缓存的方法是在bean的生命周期的初始化阶段调用的(例如setter,init),此时方法缓存拦截器还没被调用执行,那么缓存将不起作用,如做了下面的配置:

<bean id="OrganizationManagerMethodCache" class="org.springframework.aop.framework.ProxyFactoryBean">

<property name="target">

<bean class="com.wzj.rbac.ServiceFacade.OrganizationManager" init-method="init" autowire="byName"/>

</property>

<property name="interceptorNames">

<list>

<value>methodCachePointCut</value>

</list>

</property>

</bean>

在init初始方法里面调用的缓存方法将失效。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有