From 82fddf702f76b238c1435fbdc439a64351e21cf8 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sat, 14 Dec 2024 16:26:03 +0800 Subject: [PATCH] fix: byPassModule not work --- .../buddy/ByPassJavaModuleInterceptor.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java b/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java index 553e54fb..f50e74f3 100644 --- a/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java +++ b/generator/src/main/java/com/reajason/javaweb/buddy/ByPassJavaModuleInterceptor.java @@ -1,17 +1,11 @@ package com.reajason.javaweb.buddy; import net.bytebuddy.asm.Advice; -import net.bytebuddy.asm.AsmVisitorWrapper; -import net.bytebuddy.description.modifier.Ownership; -import net.bytebuddy.description.modifier.Visibility; import net.bytebuddy.dynamic.DynamicType; -import net.bytebuddy.implementation.FixedValue; -import net.bytebuddy.implementation.MethodCall; import java.lang.reflect.Field; import static net.bytebuddy.matcher.ElementMatchers.isTypeInitializer; -import static net.bytebuddy.matcher.ElementMatchers.named; /** * JDK9 引入的 module 系统,只有主动声明 exports 的才能被外部访问。当前用于打破 module 的限制,使我们能像低版本一样任意反射获取方法 @@ -39,7 +33,7 @@ public class ByPassJavaModuleInterceptor { * Reference1: stackoverflow * Reference2: issue *
- * 向类中添加 byPassJdkModule 方法,并在静态代码块中执行 byPassJdkModule 方法 + * 在静态代码块中执行 byPassJdkModule 代码 * 值得注意的一点,builder 是不可变类型,所以都是需要重新赋值,例如以下代码示例 * # code that not work * builder = new Bytebuddy().redefine(class); @@ -56,13 +50,7 @@ public class ByPassJavaModuleInterceptor { * @return new builder with bypass */ public static DynamicType.Builder extend(DynamicType.Builder builder) { - return builder - .defineMethod("byPassJdkModule", void.class, Visibility.PUBLIC, Ownership.STATIC) - .intercept(FixedValue.originType()) - .visit(new AsmVisitorWrapper.ForDeclaredMethods() - .method(named("byPassJdkModule"), - Advice.to(ByPassJavaModuleInterceptor.class))) - .invokable(isTypeInitializer()) - .intercept(MethodCall.invoke(named("byPassJdkModule"))); + return builder.visit(Advice.to(ByPassJavaModuleInterceptor.class) + .on(isTypeInitializer())); } } \ No newline at end of file