简介
假设我们有需求:所有的控制器(Controller)添加耗时,对所有的服务(Service)添加调用信息,使用一个agent代理,也就是所有实现在一个jar包中,该如何处理?
此类问题,最好采用插件化开发:定义一个插件接口,各个功能实现接口即可。本文讲解如何定义接口,接口与byte-buddy集成,不涉及具体功能实现。
使用版本
- JDK 11
- byte-buddy 1.12.3
开发项目
要定义接口,必须先了解byte-buddy如何使用,下面是一个简单的例子:
AgentBuilder.Transformer transformer = (builder, typeDescription, classLoader, javaModule) -> {
return builder
// 拦截任意方法
.method(ElementMatchers.any()) <<1>>
// 委托
.intercept(MethodDelegation.to(ElapseOfTimeWriter.class)); <<2>>
};
new AgentBuilder.Default()
// 指定需要拦截的类
.type(ElementMatchers.named(TARGET_CLASS)) <<3>>
.transform(transformer) <<4>


9443

被折叠的 条评论
为什么被折叠?



