1、aop介绍
面向切面的编程Aspect Oriented Programming,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
2.1 spring aop
三个基础概念:
- advice:定义拦截行为,以及执行时机。比较常见的,方法执行之前进行拦截,执行之后,环绕,以及发生异常之后等执行时机。
- pointcut:切入点。哪些方法需要增强,通常使用execution表达式进行增强。
- weaving:代码织入。通常代表spring对advice和pointcut的集合处理。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fa099fece6df4b96b85cbafc09391311.png)
SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,并没有提供一种新的AOP实现方式,其底层逻辑为jdk与cglib动态代理。
2.2 jdk动态代理
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)));
}
}
2、分布式链路追踪
Dapper
故障快速定位:可以通过调用链结合业务日志快速定位错误信息。
链路性能可视化:各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来。
链路分析:通过分析链路耗时、服务依赖关系可以得到用户的行为路径,汇总分析应用在很多业务场景。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ef0f4a03634840359e380adcbcb0a45c.png)
https://pics2.baidu.com/feed/7af40ad162d9f2d3fd977039b26b8a1a6127ccf6.png?token=30fa37fc2fd2aef6c3d0274b2b3fc173
2.1 日志规范
主要记录TraceId,SpanId等链路分析标识。
2.2 Spring Log组件
有时间再来更新吧。。
2.3 MDC介绍以及使用
logback自定义MessageConverter
3、接入
3.1 侵入式接入
3.2 aop接入
4、中间件skywalking
4.1 基本原理介绍
4.2 agent示例