使用AspectJ LTW时出现Spring缓存问题

sil*_*b77 5 java spring caching aspectj load-time-weaving

我正在使用Spring 3.0 RC1中的缓存抽象机制:我已经设置了字节码(基于AspectJ),因此缓存机制可以应用于从类本身内部调用的方法.值得一提的是,首先我使用基于代理的方法:一切正常(因为方法是从另一个对象调用的.)

一旦我切换到AspectJ(我激活了LTW,将正确的jar添加到他们的位置 - 一切正常,没有抛出异常),没有发生缓存

有什么建议吗?谢谢.

====以后编辑========

我将日志设置为DEBUG for org.springframework.

如果使用代理模式,我可以清楚地看到消息添加缓存方法'getLargeAssetContent'....其中getLargeAssetContent是我的"可缓存"方法...(请参见下文)

如果使用aspectj模式,我没有看到此消息....每个请求都转到DAO层...其中,在缓存工作的情况下,请求在服务层停止.

我做错了什么?我需要一个aop.xml吗?我没有使用AOP ....所以我还没有aop.xml.

谢谢您的帮助.

*>*2011-12-12 16:38:55,998 DEBUG [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] caches = [assets] | condition =''| key ='#nodeId'] 2011-12-12 16:38:56,013 INFO [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 INFO [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 DEBUG [org.springframework.web.servlet.DispatcherServlet](http-127.0.0.1-8080-6)[/ myprj/asset/get/575d8dc0-的最后修改值01be-41e4-85ce-a654fab97fe8]是:-1 2011-12-12 16:38:57,654 INFO [com.mycompany.myprj.services.AssetService](http-127.0.0.1-8080-6)获取带有id的资产: 57

*

Tom*_*icz 1

确保启用了 AspectJ 模式(请参阅28.3.3 启用缓存注释):

<cache:annotation-driven mode="aspectj"/>
Run Code Online (Sandbox Code Playgroud)

默认情况下,缓存抽象使用proxy模式,尽管启用了 LTW(应该自动切换到aspectj恕我直言,但事实并非如此)。

如果这无助于从外部和内部调用缓存方法时检查堆栈跟踪 - 有什么区别?

  • 只是好奇,有人设法让这个东西发挥作用吗?(即使用aspectj的缓存抽象) (2认同)