메소드를 정의한 다음 ByteBuddy로 메소드를 여러 번 꾸밀 수있는 방법은 무엇입니까? 이 내 예입니다ByteBuddy를 사용하여 메소드 장식하기
Builder<Object> builder = new ByteBuddy().subclass(Object.class).name("Dynamic");
builder = builder.defineMethod("method", void.class, Visibility.PUBLIC)
.intercept(MethodDelegation.to(new Object(){
@RuntimeType
public void intercept(@This Object o) {
System.out.println("Executing code...");
}
}));
builder = builder.method(ElementMatchers.named("method")).
intercept(MethodDelegation.to(new Object(){
@RuntimeType
public void intercept(@This Object o) {
System.out.println("Executing other code...");
}
}));
try {
Class cls = builder.make()
.load(StructClassBuilder.class.getClassLoader())
.getLoaded();
Object obj = cls.newInstance();
cls.getDeclaredMethod("method").invoke(obj, args);
} catch (Exception e1) {
e1.printStackTrace();
}
출력은
나는 출력이실행 코드입니다 싶습니다 ... 다른 코드를 실행
입니다 .. .
실행 다른 코드 ...
감사
나는 여러 번 하위 클래스를 만들 수 없습니다. 인터셉터를 꾸미기 위해 데코레이터 패턴을 사용하겠습니다. 고맙습니다. – Marpa
나는 본다. 귀하의 답변에 대한 대체 솔루션을 사용하여 답변을 업데이트했습니다. – kaos