Ant*_*val 8 java profiling spring-aop
我正在寻找一个功能或软件,他将允许我轻松地分析我的方法执行时间,并选择通过包过滤器分析的内容.
我知道,它是分析器101.我使用TPTP分析器.但我对它并不满意.坦率地说,我只是不明白它是如何工作的,当我描述我的应用程序(在分析模式下启动服务器)时,它将永远无所事事.(好吧,不是我的期望:简单的执行时间输出)
所以我用系统时间自己进行分析(在方法的开头和结尾添加一行).也不是那么坏.
我的问题是:我想在使用Spring AOP调用方法之前和之后测量系统时间,你能给我指点吗?这是一个好/坏的主意?代码库非常大,我们没有很多单元测试,难道不是"危险"吗?
我不是要求代码,我想我可以用这种链接自己做:http: //static.springsource.org/spring/docs/2.5.x/reference/aop.html
但如果你有一个很好的教程(以前从未做过AOP,只知道这个概念),我就接受了.
Gre*_*zky 13
在Spring中有一个内置的支持.
我试图寻找教程,但令人惊讶的是我没有找到它,所以我会尝试在这里解释它.(编辑:我在这里将这个例子添加到我的博客中)
基本上你需要的是像这样扩展CustomizableTraceInterceptor类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
此类包装您的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>
Run Code Online (Sandbox Code Playgroud)
基本上你定义要用"beanNames"中的通配符包装的bean,"order"控制包装的顺序 - 如果你没有其他AOP类,你可以删除它.如果更改enterMessage和exitMessage属性,也可以更改输出格式.
这应该足以让你开始.如果您需要澄清,请不要犹豫.