小编gla*_*ror的帖子

Spring切入点指示符差异(内部vs执行)

请...有人能解释一下使用以下弹簧切入点指示符之间有什么区别吗?

使用"切入点指示符":

<aop:pointcut expression="within(my.app.dao.impl.*)" id="commonDaoOperation"/>
Run Code Online (Sandbox Code Playgroud)

使用"执行切入点指示符":

<aop:pointcut expression="execution(public * my.app.dao.impl.*.*(..))" id="commonDaoOperation"/>
Run Code Online (Sandbox Code Playgroud)

我在我的web项目中使用第二个(我认为它是最常用的),我用这种方法发现的问题是它在堆中消耗了大量内存......

在使用"eclipse内存分析器"分析应用程序服务器的"堆转储"后,我发现我的应用程序消耗了450 MB,并且该类的实例"org.springframework.aop.aspectj.AspectJExpressionPointcut"正在消耗这些450 MB的30%......

每个实例AspectJExpressionPointcut占用6 MB(大约),这是因为每个实例都保留了与java.lang.reflect.Method实例匹配的缓存,并且令人惊讶的是有很多java方法被缓存(我的切入点表达式没有提到的方法).

在阅读Spring Documentation之后,我决定使用第一种方法(在切入点指示符内),现在每个实例AspectJExpressionPointcut占用的内存都少得多.

问题是关于......他们之间的表现有什么不同......

提前谢谢了...

java spring spring-aop pointcut

10
推荐指数
1
解决办法
9265
查看次数

标签 统计

java ×1

pointcut ×1

spring ×1

spring-aop ×1