使用 Spring AOP 进行方法分析(基本执行时间)

2024-02-03

我正在寻找一种功能或软件,它可以让我轻松地分析我的方法执行时间并选择通过包过滤器分析的内容。

我知道,它是探查器 101。 我使用 TPTP 分析器。但我对此并不满意。坦率地说,我只是不明白它是如何工作的,当我分析我的应用程序(以分析模式启动服务器)时,它需要永远不执行任何操作。 (好吧,不是我所期望的:执行时间的简单输出)

因此,我自己使用系统时间进行分析(在方法的开头和结尾添加一行)。也不是那么坏。

我的问题是:我想用 Spring AOP 测量方法调用之前和之后的系统时间,你能给我指导吗?这是一个好/坏主意?代码库相当大,而且我们没有很多单元测试,这不是很“危险”吗?

我不要求代码,我想我可以通过这种链接自己完成:http://static.springsource.org/spring/docs/2.5.x/reference/aop.html http://static.springsource.org/spring/docs/2.5.x/reference/aop.html

但如果你有一个很好的教程(以前从未做过 AOP,只知道概念),我会接受。


Spring 对此有内置支持。

我试图寻找教程,但令人惊讶的是我没有找到教程,所以我将尝试在这里解释它。 (编辑:我将此示例添加到我的博客中here http://idevone.wordpress.com/2009/09/02/howto-simple-profiling-with-spring-aop/)

基本上你需要的是扩展 CustomizedTraceInterceptor 类,如下所示:

public class MyTraceInterceptor extends CustomizableTraceInterceptor {

  protected void writeToLog(Log logger, String message, Throwable ex) {
    if (ex != null) {
        logger.info(message, ex);
    } else {
        logger.info(message);
    }
  }


  protected boolean isInterceptorEnabled(MethodInvocation invocation, Log logger) {
    return true;
  }
}

此类包装您的 bean 并将方法调用信息(包括参数、返回值和执行时间)输出到日志。通过改变writeToLog()您可以控制要输出数据的位置以及严重性的方法。

现在您需要一些 XML 来实际选择要包装的 bean:

    <!-- Tracing -->

<bean name="traceInterceptor" class="MyTraceInterceptor" dependency-check="none">

    <property name="enterMessage" value="ENTER: $[targetClassShortName].$[methodName]($[arguments])"/>

    <property name="exitMessage"

              value="EXIT: $[targetClassShortName].$[methodName]() : $[invocationTime]ms : $[returnValue]"/>

</bean>

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" dependency-check="none">

    <property name="beanNames" value="*RequestListener,*Notifier"/>

    <property name="proxyTargetClass" value="true"/>

    <property name="interceptorNames">

        <list>

            <value>traceInterceptor</value>

        </list>

    </property>

    <property name="order" value="2"/>

</bean>

基本上,您可以在“beanNames”中使用通配符定义要包装的bean,而“order”控制包装的顺序 - 如果您没有其他 AOP 类,则可以将其删除。如果更改 EnterMessage 和 exitMessage 属性,还可以更改输出格式。

这应该足以让您开始。如果您需要澄清,请随时询问。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring AOP 进行方法分析(基本执行时间) 的相关文章

随机推荐

  • 在 VS2012 中使用 'volatile' 关键字的最佳实践

    自从将我们的开发和构建环境从 VS2008 升级到 VS2012 以来 我对使用volatile我们的遗留代码库中的关键字 它非常广泛 因为有很多复制的模式用于管理 旧 时代的线程 微软在VS2012文档中有如下备注 如果您熟悉 C vol
  • 编译错误:只有在公共对象模块中定义的用户定义类型可以强制转换为变体或从变体强制转换或传递给后期绑定函数

    我正在努力学习一些 VBa 和 Excel 我需要在 VBa 中创建一个结构 它是Type 我遇到的问题是 当我尝试执行代码时收到一条错误消息 我觉得我需要解释一下我是如何到达现在的位置的 以防我犯了错误 我读过要创建一个类型 它需要公开
  • lang=unknown 属性有效吗?

    给定一个特定语言 英语 的 HTML 文档 我在标签上定义了一个 lang 属性 页面中的某些文本是用另一种语言编写的 例如法语 span blabla span 但是 如果我无法识别语言 但我知道它不是英语 我可以将 未知 设置为 lan
  • 从已安装的 rpm 重新打包 rpm

    在 Linux 上我们可以重新打包已安装的 rpm 如果可以的话如何 我记得可以从已安装的二进制文件生成 rpm rpm gt my rpm 另外 即较新的 rpm 应该在不同的机器上工作 还有rpmrebuildhttp rpmrebui
  • C++ 的 OpenGL 实现列表

    我只是将我的项目从 Visual Studio 迁移到 Eclipse 这样我就可以为 Linux 构建它们 但我遇到了 OpenGL 库文件的问题 Visual Studio 附带了 Microsoft 的库和头文件 用于在项目中包含 O
  • SQL - 多个条件where子句同一列

    我有一个看起来有点像这样的数据集 Subject ID Diagnosis ID 001 299 001 288 001 233 001 299 002 299 002 233 003 238 004 299 004 233 我想创建一个新
  • Vagrant::Errors::NetworkCollision:指定的主机网络与非主机网络发生冲突

    我在多台机器上使用 vagrant 它曾经正常工作 但后来它就不再工作了 我在 Vagrantfile 中定义网络的部分 config vm define app do layer layer vm provision chef solo
  • 在运行时将数据分配给四维数组

    我有一个四维数组 其中有一组静态值 但我的问题是我想从 api 获取一些数据并且必须将其放入四维数组中运行时期间 我不知道该怎么做 任何最轻微的想法将不胜感激 这是我的示例 显示了我的四维数组的静态定义 static final Strin
  • Allure报告:Chrome中没有显示任何内容

    我正在尝试使用Allure框架 https github com allure framework allure core为我生成一份报告硒网络驱动程序 http docs seleniumhq org projects webdriver
  • 重新启用 iPhone 模拟器位置服务

    我在模拟器上禁用了位置服务 并设置了 不再询问 选项 以为我可以稍后重新启用它 但现在我不知道如何操作 有人可以指出我在哪里更改此设置吗 Thanks 解决方案 系统偏好设置 gt 安全 gt 按钮 重置警告 您可能需要先单击左下角的锁 然
  • 在android中实现带有分区分隔符的列表

    嗨 我如何实现一个带有部分分隔符的列表 就像android上的那样构建块列表 http developer android com design building blocks lists html 您能指出任何文章或教程来实现这一目标吗
  • git克隆https/ssl错误[重复]

    这个问题在这里已经有答案了 我已经在我的 git 服务器中安装了 ssl 证书和密钥 但是当我尝试从 mysysgit 通过 https 克隆时出现错误 早些时候 它在 http 上工作得很好 无法确定问题出在哪里 git clone ht
  • Angular-cli 测试覆盖所有文件

    我正在运行以下命令来进行单元测试并生成代码代码覆盖率报告 ng test code coverage 它正在覆盖率文件夹中写入代码覆盖率报告 我需要查看整个项目的覆盖范围 而不仅仅是进行测试的文件 karma conf js module
  • 如何对 Python 字典执行集合运算?

    虽然能够在字典的键之间执行集合操作非常有用 但我经常希望可以对字典本身执行集合操作 我找到了一些服用食谱两个词典的区别 http code activestate com recipes 576644 diff two dictionari
  • 使用 Python 的 ElementTree 查找顶级 xml 注释

    我正在使用 Python 的 ElementTree 解析 xml 文件 如下所示 et ElementTree file file test xml test xml 以几行 xml 注释开头 有没有办法从 et 那里得到这些评论 对于
  • 如何获取 IOrderedQueryable 中项目的索引?

    背景 我正在设计一个类似列表的控件 WinForms 它由DbSet 一个主要要求是它doesn t将整个列表加载到本地内存中 我正在使用一个DataGridView在虚拟模式下作为底层 UI 我正计划实施CellValueNeeded充当
  • ASP.NET MVC - 部分视图可以有控制器吗?

    当我在视图中调用时 Html RenderPartial MyPartialView MyObject 我可以设置它以便该部分视图有一个在调用 RenderPartial 时调用的控制器吗 使用可能会更好渲染动作 http msdn mic
  • 使用 在从 XSL FO 生成的 PDF 中插入换行符

    我正在使用 XSL FO 生成一个包含信息表的 PDF 文件 其中一列是 描述 列 我填充这些描述字段之一的字符串示例如下 This is an example Description br List item 1 br List item
  • 如何访问手机照片库中的图像?

    顺便问一下 有人知道如何访问手机的照片库吗 我正在制作一个应用程序来拍摄植物叶子的照片 分析图像以确定其是否已确定 我们希望我们 可以为用户提供两种选择 拍摄叶子的照片或使用植物的图像 用户已经拿走的叶子 然而 我们拍了照片 但我们没有 知
  • 使用 Spring AOP 进行方法分析(基本执行时间)

    我正在寻找一种功能或软件 它可以让我轻松地分析我的方法执行时间并选择通过包过滤器分析的内容 我知道 它是探查器 101 我使用 TPTP 分析器 但我对此并不满意 坦率地说 我只是不明白它是如何工作的 当我分析我的应用程序 以分析模式启动服