【问题标题】:Aspectj pointcut on spring bean destruction关于spring bean破坏的Aspectj切入点
【发布时间】:2016-08-22 01:14:13
【问题描述】:
是否可以在 Java 中执行 AspectJ 通知,当目标对象超出范围或被销毁时执行?
假设我们有一个类,该类具有各种方法,这些方法由切入点表达式匹配,并且已经实现了缓存方面,以便所有方法调用的响应都已被缓存。缓存键是代理对象与方法签名和参数的串联。我们希望在目标对象被销毁时使缓存无效。
任何人都可以分享有关我们如何在该对象被销毁时执行建议的详细信息吗?
【问题讨论】:
标签:
java
spring
aop
aspectj
pointcut
【解决方案1】:
您可能指的是缓存方面here。
您不仅可以保留对表示方法调用的字符串的引用,还可以保留对调用要缓存的方法的实际对象的引用。这里重要的部分是您必须使用弱引用,以免相应的对象超出范围。您可以收集 WeakHashMap 中的所有对象并定期运行清理作业,以从实际缓存中删除不存在的对象。
更新:我不是 Spring 用户,但也许 Spring 中也有生命周期方法/钩子,当组件超出范围或以其他方式结束其生命周期时可以触发它们。