new AgentBuilder.Default()
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
.ignore(agent.buildExcludeMatcher())
// 过滤
.type(agent.buildIncludeMatcher())
.transform((builder, typeDescription, classLoader, javaModule) -> builder
.method(agent.buildExcludeMethodMatcher())
.intercept(Advice.
to(LinkAdvice.class)))
.installOn(instrumentation);
public class LinkAdvice {
@Advice.OnMethodEnter()
public static void enter(@Advice.Origin Method method, @Advice.AllArguments Object[] allArguments) {
// 创建记录
}
@Advice.OnMethodExit()
public static void exit(@Advice.Origin Method method, @Advice.AllArguments Object[] allArguments) {
// 方法结束 将此方法设置到上级方法中生成调用链路
System.out.println("调用链路(MQ) - class: " + method.getDeclaringClass() + " method: " + method.getName());
}
}
我的另一个Sprongboot的项目存在一个mapper
public interface StatisticsSqlMapper {
InterfaceStatisticsDTO getInterfaceStatistics();
}
实现在xml中,当我使用agent代理的时候调用这个方法就会抛出NoSuchMethodError异常,当我不使用的时候就访问正常 项目中使用的mybatis-plus。
然后我尝试过StatisticsSqlMapper extends BaseMapper 使用agent代理后可以正常访问。我就很纳闷这是什么原因 新手入行