gpt4 book ai didi

java - 使用 AspectJ LTW 时的 Spring 缓存问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:25 25 4
gpt4 key购买 nike

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

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

有什么建议吗?谢谢。

====稍后编辑========

我将日志设置为 org.springframework 的 DEBUG。

如果使用代理模式,我可以清楚地看到消息 Adding cacheable method '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) Adding cacheable method 'getLargeAssetContent' with attribute: [CacheOperation[public com.mycompany.myprj.model.AssetContent com.mycompany.myprj.dao.jcr.AssetDAOImpl.getLargeAssetContent(java.lang.String) throws 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) Getting the content (getLargeAssetContent) of asset from node with 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) Returning the content of asset from node with id=575d8dc0-01be-41e4-85ce-a654fab97fe8**

*

//the content is cached by now 2011-12-12 16:38:57,654 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] (http-127.0.0.1-8080-6) Returning cached instance of singleton bean 'assetController' 2011-12-12 16:38:57,654 DEBUG [org.springframework.web.servlet.DispatcherServlet] (http-127.0.0.1-8080-6) Last-Modified value for [/myprj/asset/get/575d8dc0-01be-41e4-85ce-a654fab97fe8] is: -1 2011-12-12 16:38:57,654 INFO [com.mycompany.myprj.services.AssetService] (http-127.0.0.1-8080-6) Getting asset with id: 57

*

最佳答案

确保启用 AspectJ 模式(参见 28.3.3 Enable caching annotations):

<cache:annotation-driven mode="aspectj"/>

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

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

关于java - 使用 AspectJ LTW 时的 Spring 缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com