在普通Groovy类上使用Grails缓存插件注释

时间:2014-09-23 14:56:22

标签: grails caching grails-cache

是否可以在正常的Groovy类中使用Grails Cache插件的注释(即:@Cacheable)?插件的文档没有提到任何关于普通Groovy类的内容,并且基于我自己的测试,注释在普通类中使用时没有任何效果。所以我只是想知道是否有办法让注释在普通的Groovy类中工作。

目前的替代方案是通过Cache Manager bean直接访问方法中的缓存,但是使用注释会很好。

1 个答案:

答案 0 :(得分:1)

不,注释仅适用于服务和控制器。该插件检测注释并为服务创建代理,该代理拦截所有方法调用并首先执行与缓存相关的工作。因此,如果该方法的缓存中有一个值,它就不会打扰调用您的实际方法,而是返回缓存的值。但是如果它没有被缓存,它将调用你的方法并使用它的返回值,但是为了以后缓存它。

这是有效的,因为您必须从Spring ApplicationContext检索服务(或让Grails为您执行此操作),这使Spring有机会为您提供代理而不是真正的实现实例,但是&# 39;如果没有AOP或其他一些更具侵入性的解决方案,Spring无法了解有关访问常规Groovy类的信息。

话虽如此,插件可能过于严格,仅限于控制器和服务。它特别处理控制器,因为那些涉及缓存Web请求而不是方法返回值,但就缓存而言,Grails服务和任何其他带注释的Spring bean之间不应该有太大区别。您可以在grails-app/conf/spring/resources.groovy中手动添加自己的Spring bean,也可以将它们添加到Config.groovy中的grails.spring.bean.packages列表中,因此应该更新插件以查找所有带注释的类。您可以在https://jira.grails.org/browse/GPCACHE

的插件JIRA中申请