如何在 java 项目中使用 ByteBuddy
How to use ByteBuddy in a java project
我做了一个java的简单项目来测试ByteBuddy。我在 Rafael Winterhalter 制作的教程中输入了完全相同的代码,但它显示了一些错误
1) ByteBuddyAgent cannot be resolved.
2) type cannot be resolved to a variable.
3) builder cannot be resolved.
4) method cannot be resolved to a variable.
我添加了 byte-buddy-1.7.1.jar 作为引用库。
public class LogAspect {
public static void main(String[] args){
premain("", ByteBuddyAgent.installOnOpenJDK());
Calculator calculator = new Calculator();
int sum = calculator.sum(10, 15, 20);
System.out.println("Sum is "+ sum);
}
public static void premain(String arg, Instrumentation inst){
new AgentBuilder.Default()
.rebase(type -> type.getSimpleName().equals("Calculator"))
.transform((builder, typeDescription) -> builder
.method(method -> method.getDeclaredAnnotations().isAnnotationPresent(Log.class))
.intercept(MethodDelegation.to(LogAspect.class).andThen(SuperMethodCall.INSTANCE)))
.installOn(inst);
}
public static void intercept(@Origin Method method){
System.out.println(method.getName()+" is called.");
}
}
@interface Log{
}
class Calculator {
@Log
public int sum(int... values) {
return Arrays.stream(values).sum();
}
}
看来您使用的是非常过时的 0.* ara 教程。使用 IDE 检查编译时错误,使用 check the webpage 查看最新教程。
我做了一个java的简单项目来测试ByteBuddy。我在 Rafael Winterhalter 制作的教程中输入了完全相同的代码,但它显示了一些错误
1) ByteBuddyAgent cannot be resolved.
2) type cannot be resolved to a variable.
3) builder cannot be resolved.
4) method cannot be resolved to a variable.
我添加了 byte-buddy-1.7.1.jar 作为引用库。
public class LogAspect {
public static void main(String[] args){
premain("", ByteBuddyAgent.installOnOpenJDK());
Calculator calculator = new Calculator();
int sum = calculator.sum(10, 15, 20);
System.out.println("Sum is "+ sum);
}
public static void premain(String arg, Instrumentation inst){
new AgentBuilder.Default()
.rebase(type -> type.getSimpleName().equals("Calculator"))
.transform((builder, typeDescription) -> builder
.method(method -> method.getDeclaredAnnotations().isAnnotationPresent(Log.class))
.intercept(MethodDelegation.to(LogAspect.class).andThen(SuperMethodCall.INSTANCE)))
.installOn(inst);
}
public static void intercept(@Origin Method method){
System.out.println(method.getName()+" is called.");
}
}
@interface Log{
}
class Calculator {
@Log
public int sum(int... values) {
return Arrays.stream(values).sum();
}
}
看来您使用的是非常过时的 0.* ara 教程。使用 IDE 检查编译时错误,使用 check the webpage 查看最新教程。