Reflection API 클래스 정보 수정 또는 실행 Reflection API 를 활용해 인스턴스 생성하기 기본생성자를 가져와 인스턴스 생성 기본생성자로 인스턴스를 생성하는 방법은 getConstructor 메소드에서 인자를 null로 지정해주어 생성자를 가져온다. 가져온 생성자의 newInstance 메소드를 통해 인스턴스를 생성해준다. 파라메터가 존재하는 생성자를 가져와 인스턴스 생성 파라메터가 존재하는 생성자로 인스턴스를 생성하는 방법은 getConstructor 메소드에서 인자를 Class type 인스턴스를 지정해주어 생성자를 가져온다. 기본 생성자와 마찬가지로 newInstance 메소드를 통해 인스턴스르 생성해준다. Reflection API 를 활용해 필드 정보 참조하기 static 필..
Annotation Reflection Annotation 애노테이션은 JEE5 부터 추가된 기능이다. 애노테이션은 다양한 목적으로 사용되지면 주로 메타 데이터의 비중이 가장 크다. 메타 데이터(Meta-Data): 데이터를 위한 데이터, 한 데이터에 대한 설명을 의미한다 MyAnnotation @Retention 컴파일러가 애노테이션을 다루는 방법을 기술하며, 어느 시점까지 정보를 유지할것인지 결정한다. RetentionPolicy.SOURCE : 컴파일 전까지만 유효. (컴파일 이후에는 사라짐) RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효. RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능. (리플렉션 사용) 기본값은 ..
Reflection Class API를 사용하여 리플렉션을 사용할 수 있음 Reflection을 사용하여 참조할 수 있는 정보 클래스의 필드 상위클래스 인터페이스 메소드 목록 등 .. Reflection 사용해보기 Reflection 을 사용하기 이전 참조할 클래스를 생성해보자 Book, MyBook, MyInterface Reflection 사용하기 Class 인스턴스를 참조하는 방법 class 인스턴스를 참조하는 방법은 3가지이다. 1.Book.class 와 같이 클래스 로드시 힙에 저장되는 class 인스턴스를 참조하는 방법 2.특정인스턴스의 getClass() 메소드로 참조하는 방법 3.FQCN을 이용해 Class.forName() 메소드로 참조하는 방법 특정 클래스의 필드 참조하기 getFiel..
기존에는 ByteBuddy를 사용해서 전처리를 해준뒤, 다시 실행해야지만 모자에서 토끼가 나오는 마술이 일어난다. ByteBuddy로 바이트코드 조작을 하는 시점에 이미 Hat클래스를 로드 했기때문에, ByteBuddy로 바이트조작을 한다 한들, 실행라인에서 새로이 클래스를 로드하지 않기때문에 발생하는 일이다. 하지만 이런경우는 우리가 바라는 그림이 아니다. 우리가 바라는 그림은 현재 마술사 클래스에서 아무런 전처리작업 없이 실행만 하여도 모자에서 토끼가 나오는 마술이 펼쳐지는 것이다. JavaAgent 소개 JDK는 JVM이 구동될때 이 JVM내에서 특정 작업을 수행할 에이전트, 즉 요원을 지정할 수 있는 방식을 제공해왔다. JDK1.5 이전 버전에서는 JVMPI(JVM Profiler Interfac..