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