1、引入依赖
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
</dependency>
2、被替换的类和Mock类
AesUtils
public class AesUtils {
public static String encrypt(String plainText) {
return "enc(" + plainText + ")";
}
}
AesUtilsMock
public class AesUtilsMock {
public static String encrypt(String plainText) {
return plainText;
}
}
想要的效果是在生产环境使用AesUtils,本地调试使用AesUtilsMock
调用该工具类的接口
@GetMapping("/test1")
public String test1(String enc){
return AesUtils.encrypt(enc);
}
3、使用ByteBuddyAgent实现替换
public static void main(String[] args) {
SpringApplication.run(ApplicationMain.class);
ByteBuddyAgent.install();
new ByteBuddy()
.redefine(AesUtilsMock.class)
.name(AesUtils.class.getName())
.make()
.load(AesUtils.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());
}
改造前
改造后