赞
踩
背景
为了掌握链路中方法的执行情况,通过链路分析可以知道代码逻辑实现。
技术
显然,为了需要跟踪方法的执行情况,需要对方法进行aop拦截
生成字节码技术的方式有两种,一种类于javaproxy产生的字节码样式。一种是在进入方法和限出方法时注入代码实现aop代码增强(2)。具体实现见asm实现AOP的两篇文章
另外,对于代码的跟踪,还需要一个数据结构来记录一个链路的代码执行情况。
具体实现
静态AOP基于java agent方式加载
java-javaagent:myagent.jar
基中myagent.jar就是实现链路方法跟踪的jar包。
链路跟踪类的实现
public class InvokeTree {
static ThreadLocal localTree = new ThreadLocal();
public static class InvokeNode {
public InvokeNode(int deep) {
this.deep = deep;
this.invokeCount = 1;
}
public InvokeNode parentNode;
public List childNodes;
public String invokeMethod;
public int deep;
public int invokeCount
public boolean equals(InvokeNode other) {
if (other == null) {
return false;
}
if (!invokeMethod.equals(other.invokeMethod)) {
return false;
}
if (childNodes == null && other.childNodes == null) {
return true;
}
if (childNodes == null || other.childNodes == null) {
return false;
}
int size = childNodes.size();
if (size != other.childNodes.size()) {
return false;
}
for (int i = 0; i < size; i++) {
InvokeNode x = childNodes.get(i);
InvokeNode y = other.childNodes.get(i);
if (!x.equa
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。