All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.arthas.SpyAPI Maven / Gradle / Ivy

The newest version!
package java.arthas;

/**
 * 
 * 一个adviceId 是什么呢? 就是一个trace/monitor/watch命令能对应上的一个id,比如一个类某个函数,它的 enter/end/exception 统一是一个id,分配完了就不会再分配。
 * 
 * 同样一个method,如果它trace之后,也会有一个 adviceId, 这个method里的所有invoke都是统一处理,认为是一个 adviceId 。 但如果有匹配到不同的 invoke的怎么分配??
 * 好像有点难了。。
 * 
 * 其实就是把所有可以插入的地方都分类好,那么怎么分类呢?? 或者是叫同一种匹配,就是同一种的 adviceId? 
 * 
 * 比如入参是有  class , method ,是固定的  ,  某个行号,或者 某个
 * 
 * aop插入的叫 adviceId , command插入的叫 ListenerId?
 * 
 * 
 * 
 * 
* * @author hengyunabc * */ public class SpyAPI { public static final AbstractSpy NOPSPY = new NopSpy(); private static volatile AbstractSpy spyInstance = NOPSPY; public static volatile boolean INITED; public static AbstractSpy getSpy() { return spyInstance; } public static void setSpy(AbstractSpy spy) { spyInstance = spy; } public static void setNopSpy() { setSpy(NOPSPY); } public static boolean isNopSpy() { return NOPSPY == spyInstance; } public static void init() { INITED = true; } public static boolean isInited() { return INITED; } public static void destroy() { setNopSpy(); INITED = false; } public static void atEnter(Class clazz, String methodInfo, Object target, Object[] args) { spyInstance.atEnter(clazz, methodInfo, target, args); } public static void atExit(Class clazz, String methodInfo, Object target, Object[] args, Object returnObject) { spyInstance.atExit(clazz, methodInfo, target, args, returnObject); } public static void atExceptionExit(Class clazz, String methodInfo, Object target, Object[] args, Throwable throwable) { spyInstance.atExceptionExit(clazz, methodInfo, target, args, throwable); } public static void atBeforeInvoke(Class clazz, String invokeInfo, Object target) { spyInstance.atBeforeInvoke(clazz, invokeInfo, target); } public static void atAfterInvoke(Class clazz, String invokeInfo, Object target) { spyInstance.atAfterInvoke(clazz, invokeInfo, target); } public static void atInvokeException(Class clazz, String invokeInfo, Object target, Throwable throwable) { spyInstance.atInvokeException(clazz, invokeInfo, target, throwable); } public static abstract class AbstractSpy { public abstract void atEnter(Class clazz, String methodInfo, Object target, Object[] args); public abstract void atExit(Class clazz, String methodInfo, Object target, Object[] args, Object returnObject); public abstract void atExceptionExit(Class clazz, String methodInfo, Object target, Object[] args, Throwable throwable); public abstract void atBeforeInvoke(Class clazz, String invokeInfo, Object target); public abstract void atAfterInvoke(Class clazz, String invokeInfo, Object target); public abstract void atInvokeException(Class clazz, String invokeInfo, Object target, Throwable throwable); } static class NopSpy extends AbstractSpy { @Override public void atEnter(Class clazz, String methodInfo, Object target, Object[] args) { } @Override public void atExit(Class clazz, String methodInfo, Object target, Object[] args, Object returnObject) { } @Override public void atExceptionExit(Class clazz, String methodInfo, Object target, Object[] args, Throwable throwable) { } @Override public void atBeforeInvoke(Class clazz, String invokeInfo, Object target) { } @Override public void atAfterInvoke(Class clazz, String invokeInfo, Object target) { } @Override public void atInvokeException(Class clazz, String invokeInfo, Object target, Throwable throwable) { } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy