【发布时间】:2012-01-15 21:33:01
【问题描述】:
我正在使用 Spring 3.0 RC1 中的缓存抽象机制:我设置了字节码(基于 AspectJ)weawing,以便可以将缓存机制应用于从类本身调用的方法。 值得一提的是,我首先使用的是基于代理的方法:一切正常(因为方法是从另一个对象调用的。)
一旦我切换到 AspectJ(我通过 激活 LTW,将正确的 jars 添加到它们的位置 - 一切正常,没有抛出异常),没有缓存发生
有什么建议吗?谢谢。
==== 稍后编辑 ========
我将日志设置为 org.springframework 的 DEBUG。
如果使用代理模式,我可以清楚地看到消息添加缓存方法 'getLargeAssetContent'.... 其中 getLargeAssetContent 是我的“可缓存”方法...(请参见下文)
如果使用 aspectj 模式,我看不到此消息....每个请求都转到 DAO 层...在缓存工作的情况下,请求停止在服务层。
我做错了什么?我需要 aop.xml 吗?我没有使用 AOP....,所以我还没有 aop.xml。
感谢您的帮助。
*> *2011-12-12 16:38:55,998 调试 [org.springframework.cache.annotation.AnnotationCacheOperationSource]
(http-127.0.0.1-8080-6) 添加可缓存方法“getLargeAssetContent” 带有属性:[CacheOperation[public com.mycompany.myprj.model.AssetContent com.mycompany.myprj.dao.jcr.AssetDAOImpl.getLargeAssetContent(java.lang.String) 抛出 com.mycompany.myprj.dao.MyPrjPersistenceException] 缓存=[资产] |条件='' |键='#nodeId'] 2011-12-12 16:38:56,013 信息 [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) 获取内容(getLargeAssetContent) 来自 id=575d8dc0-01be-41e4-85ce-a654fab97fe8 节点的资产 2011-12-12 16:38:56,092 信息 [com.mycompany.myprj.dao.jcr.AssetDAOImpl] (http-127.0.0.1-8080-6) 从节点返回资产的内容 id=575d8dc0-01be-41e4-85ce-a654fab97fe8**
*
//内容缓存到现在 2011-12-12 16:38:57,654 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-127.0.0.1-8080-6) 返回单例 bean 的缓存实例 'assetController' 2011-12-12 16:38:57,654 调试 [org.springframework.web.servlet.DispatcherServlet] (http-127.0.0.1-8080-6) Last-Modified 值为 [/myprj/asset/get/575d8dc0-01be-41e4-85ce-a654fab97fe8] 是:-1 2011-12-12 16:38:57,654 信息 [com.mycompany.myprj.services.AssetService] (http-127.0.0.1-8080-6) 获取 id 为 57 的资产
*
【问题讨论】:
-
当您说启用 LTW 时,您在上下文中添加了
<context:load-time-weaver/>,对吗? -
我面临着 e=完全相同的问题。你找到解决办法了吗?
-
我也是,但仍然无法使用 LTW 完成。现在回退到代理模式。
标签: java spring caching aspectj load-time-weaving