DI Container 만들어보기 Sprign IoC Container에 비하면 부족하지만 Reflection을 활용해 DI Container를 만들어 보자 @Inject @Inject 애노테이션을 만들어 해당 애노테이션이 존재하는 필드까지 DI가 되도록 구현한다. Reflection 을 활용하려면 런타임시까지 애노테이션정보가 존재해야하기 떄문에 Rentention을 RUNTIME으로 지정해준다. ContainerService 우리가 구현할 DI Container 클래스이다. T getObject(Class) 메소드 파라메터로 클래스 인스턴스를 받아 Reflection을 활용해 DI 해준다. 이때 createInstance를 활용하며, 만약 @Inject 애노테이션이 붙은 필드가 있다면 해당 필드의 인스..
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..