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

 koujj 发布于 2023-02-07 17:58

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

使用"切入点指示符":


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


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

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

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

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

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

提前谢谢了...

1 个回答
  • 在Spring文档解释了区别:

    执行 -用于匹配方法执行连接点,这是在使用Spring AOP时将使用的主要切入点指示符

    -限制匹配某些类型内的连接点(仅在使用Spring AOP时在匹配类型内声明的方法的执行)

    换句话说,execution匹配一个方法并within匹配一个类型。

    在这种情况下,切入点几乎是等效的。您within匹配包中的任何类型,my.app.dao.impl并且execution匹配包中任何类型的所有公共方法my.app.dao.impl

    但是,execution我认为,对于每个匹配的方法(很多对象),都有一个拦截器实现,within因为它与整个类型(很少的对象)匹配,所以只需要一个拦截器。

    2023-02-07 18:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有