请问有人能够解释一下使用以下Spring切点设计符号的区别吗?
使用“within切点设计符号”:
<aop:pointcut expression="within(my.app.dao.impl.*)" id="commonDaoOperation"/>
使用“execution pointcut designator”:
<aop:pointcut expression="execution(public * my.app.dao.impl.*.*(..))" id="commonDaoOperation"/>
我在我的Web项目中使用第二种方法(我认为这是最常用的方法),但我发现这种方法会在堆中占用大量内存...
通过使用"eclipse memory analyzer"分析应用程序服务器的"heap dump",我发现我的应用程序正在消耗450 MB的内存,并且类"org.springframework.aop.aspectj.AspectJExpressionPointcut"
的实例占用了这450MB的30%...
每个AspectJExpressionPointcut
实例占用约6MB的空间,这是因为每个实例都维护着一个与java.lang.reflect.Method实例匹配的缓存,令人惊讶的是,缓存中有很多不被我的切入点表达式提及的java方法。
阅读Spring文档后,我决定使用第一种方法(切入点设计器内部)来解决问题,现在每个AspectJExpressionPointcut
实例占用的内存要少得多。
问题是...它们之间的性能差异是什么...
非常感谢您提前的帮助...
within
已经匹配了execution
中的所有内容。 - Sotirios Delimanoliswithin
更加合适。 - Sotirios Delimanolis