29、SkyWalking 源码分析 @Trace 注解想要追踪的任何方法

1. 概述

本文主要分享 @Trace 注解想要追踪的任何方法

我们首先看看 @Trace 的使用例子,再看看 @Trace 的实现代码。涉及代码如下:

  •  
  •  

2. 使用例子

本节参考官方文档:Application-toolkit-trace-CN.md

1、 使用Maven引入相应的工具包;

```java

<dependency>
<groupId>org.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${skywalking.version}</version>
</dependency>
```
</tr>
</tbody>
</table>

**2、** 在**任何想要追踪**的方法上添加`@Trace`注解,以SpringMVC为例子:;

<table>
<tbody>
<tr>
<td> <pre><br><p>```java</p><br><code>@Trace
@GetMapping("/log")
public String log() {
ActiveSpan.tag("mp", "芋道源码");
System.out.println("traceId:" + TraceContext.traceId());
return "log";
}
```

3、 执行后,我们看来看看SkyWalkingWEBUI的展示;

&nbsp;

3. 实现代码

友情提示:本小节需要胖友阅读过 《SkyWalking 源码分析 —— Agent 插件体系》

3.1 TraceAnnotationActivation

org.skywalking.apm.toolkit.activation.trace.TraceAnnotationActivation ,实现 ClassInstanceMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

&nbsp;


org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor ,实现 InstanceMethodsAroundInterceptor 接口,TraceAnnotationActivation 的拦截器。代码如下:

3.2 ActiveSpanTagActivation

org.skywalking.apm.toolkit.activation.trace.ActiveSpanTagActivation ,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

&nbsp;


org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor ,实现 StaticMethodsAroundInterceptor 接口,ActiveSpanTag 的拦截器。代码如下:

  • #beforeMethod(...) 方法,添加 Span 的标签键值对注意,可以不依赖 @Trace 注解。

3.3 TraceContextActivation

org.skywalking.apm.toolkit.activation.trace.TraceContextActivation ,实现 ClassStaticMethodsEnhancePluginDefine 抽象类,定义了方法切面,代码如下:

&nbsp;


org.skywalking.apm.toolkit.activation.trace.TraceAnnotationMethodInterceptor ,实现 StaticMethodsAroundInterceptor 接口,TraceContextActivation 的拦截器。代码如下:

  • #afterMethod(...) 方法,调用 ContextManager#getGlobalTraceId() 方法,使用全局链路追踪编号,而不是原有结果。