请...有人可以解释一下使用以下弹簧切入点指示符有什么区别吗?
使用“在切入点指示符内”:
<aop:pointcut expression="within(my.app.dao.impl.*)" id="commonDaoOperation"/>
使用“执行切入点指示符”:
<aop:pointcut expression="execution(public * my.app.dao.impl.*.*(..))" id="commonDaoOperation"/>
我在我的网络项目中使用第二个(我认为它是最常用的),我发现这种方法的问题是它在堆中消耗了大量内存......
在使用“eclipse 内存分析器”分析应用程序服务器的“堆转储”后,我发现我的应用程序消耗了 450 MB,而“类"org.springframework.aop.aspectj.AspectJExpressionPointcut
”的实例消耗了 450MB 的 30%...
每个实例AspectJExpressionPointcut
占用 6 MB(大约),这是因为每个实例都维护一个与 java.lang.reflect.Method 实例匹配的缓存,并且令人惊讶的是缓存了很多 java 方法(我的切入点表达式没有提到的方法)。
阅读 Spring 文档后,我决定使用第一种方法(在切入点指示符内),现在每个实例AspectJExpressionPointcut
占用的内存要少得多。
问题是关于那个......他们之间的表现有什么区别......
提前谢谢了...