我在我的项目中使用基于Spring Declarative Annotation的缓存。
应用程序上下文.xml
<cache:annotation-driven />
目前,使用基于弹簧注释的缓存,一切都可以完美运行。我们在开发和本地环境中使用基于ehCache
和ConcurrentHashMap
的下划线缓存机制。
现在项目中有一个要求,我需要用一些特定的业务需求更新 Spring 缓存框架的行为。
我想知道是否有人帮助我弄清楚如何更换
<cache:annotation-driven />
这个注释与任何弹簧类定义,我可以自定义行为?
查看 org.springframework.cache.annotation.EnableCaching.查看源代码中的注释。
它相当于<cache:annotation-driven>,但在 Spring java 配置中。
你可能需要覆盖这个类:org.springframework.cache.aspectj.AnnotationCacheAspect
它负责接线建议。
这个答案引导我走向正确的方向。我发现的关于 spring 缓存支持的内部工作原理的事情是,它不是在 cacheManager 和 KeyGenerator 实现之外注入的依赖关系。我想对 CacheAspectSupport 进行子类化/扩展,发现这个类首先由 CacheInterceptor 扩展,然后使用类 ProxyCachingConfiguration 中的新语句创建该类。为了能够替换一个类/方法需要替换整个类列表,这听起来不是很适合春天(诚然,我可能会错过一些东西)。
我对更换该行的期望是一组完整列出的弹簧豆,它们组成了构成缓存支持的所有 AOP 切入点、建议/方面等,但似乎这只是静态创建的类,彼此之间紧密耦合。