面向切面的编程Aspect Oriented Programming,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
三个基础概念:
package spring.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;
public class ProxyTest {
// private static Log logProxy = new LogD();
// private Advice advice;
public static void main(String[] args) {
Log log = (Log) Proxy.newProxyInstance(ProxyTest.class.getClassLoader(), LogD.class.getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("pre invoke log");
Object result = method.invoke(new LogD(), args);
System.out.println("after invoke log");
return result;
}
});
log.info("this is test !!1",222);
}
}
interface Log {
void info(Object... args);
}
class LogD implements Log {
@Override
public void info(Object... args) {
System.out.println(String.format("log info %s", Arrays.toString(args)));
}
}
故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。
链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。
https://pics2.baidu.com/feed/7af40ad162d9f2d3fd977039b26b8a1a6127ccf6.png?token=30fa37fc2fd2aef6c3d0274b2b3fc173
主要记录TraceId,SpanId等链路分析标识。