0
저는 보일러 플레이트 방법을 자동 생성하는 데 관심이 있습니다 (Project Lombok과 비슷 함). Byte Buddy friendly API는 유망한 것으로 보이지만 사용법을 잘 모르겠습니다.필드 생성 방법 자동 생성
간단한 사용 사례입니다. 나는 이것에 대한 getter와 setter를 생성 구현을했을 주석이 클래스를 장식 할 계획입니다
public class User {
private String name;
}
클래스 User.java가 있다고 할 수 있습니다. 나는 예외를
Exception in thread "main" java.lang.NoSuchMethodException: scratchpad.User$ByteBuddy$n0KYCYB5.setName()
at java.lang.Class.getDeclaredMethod(Class.java:2130)
at scratchpad.MethodInterceptor.main(MethodInterceptor.java:22)
주를 얻고, 그러나
public class MethodInterceptor {
public static void main(String[] args) throws Exception {
User user = new ByteBuddy()
.subclass(User.class)
.defineMethod("getName", String.class, Visibility.PUBLIC)
.intercept(FieldAccessor.ofBeanProperty())
.defineMethod("setName", Void.TYPE, Visibility.PUBLIC)
.withParameter(String.class)
.intercept(FieldAccessor.ofBeanProperty())
.make()
.load(User.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded().newInstance();
user.getClass().getDeclaredMethod("setName").invoke("Jaypal");
Method m = user.getClass().getDeclaredMethod("getName");
System.out.println((String) m.invoke(null));
}
}
: 바이트 버디를 사용하여, 나는 다음을 시도 내가 프로젝트 롬복이를 지원하지 않습니다 알고, 그러나 이것은 단지 실험이다. 다른 프로젝트의 주석 생성 코드 생성에 더 관심이 있습니다. 이것은 Byte Buddy가 그러한 사용 사례에 적합한 지 알아보기 위해 노력하고있는 간단한 예입니다.
도움이나 안내 사항을 보내 주시면 감사하겠습니다.
builder.defineMethod("setName", Void.TYPE, Visibility.PUBLIC)
.withParameter(String.class)
를 통해 방법을 선언함으로써
오 ~. 미안합니다. 그러나 ByteBuddy에서 작성한 아름다운 라이브러리가 무엇인지 말해야합니다. 정말 고맙습니다! –
런타임에 생성하는 메서드에 대해 컴파일 타임 검사를 무시하는 방법은 무엇입니까? 내가 뭘하려고 애 쓰고 런타임에 주석을 기반으로 메서드를 만드는 필드를 주석입니다. 그러나, 나는 내 테스트가 그 방법을 사용하고 싶지만 컴파일러는 아직 정의되지 않았기 때문에 방해가된다. 추가 질문을 코멘트로 올리는 것에 사과드립니다. –