애노테이션 프로세서 - 1 Moja Interface pullOut() 메소드만 존재하는 인터페이스를 정의 @Magic 애노테이션 Target을 TYPE으로 지정하면, 인터페이스 ,클래스, ENUM에 지정이 가능하다. Rentention정보를 소스레벨 까지만 유지하고, 컴파일 시점에 애노테이션 프로세서를 상요해 MagicMoja 를 생성할 것이다. 애노테이션 프로세서를 사용하여, @Magic 애노테이션이 적용된 인터페이스가 존재하면, MagicMoja 라는 클래스를 생성할 것이다. MagicMojaProcessor Processor Interface를 사용해도 되지만, 자바에서 기본으로 제공하는 AbstractProcessor 추상 클래스를 사용한다. 인터페이스에서 기본으로 구현해야할 것들을 어느정도 구..
애노테이션 프로세서 롬복은 어떻게 동작할까 ? 롬복은 지루하고 반복적인 코드를 자동적으로 생성해주는 툴이다. getter, setter, toString... 롬복의 원리 자바가 제공하는 애노테이션 프로세서를 이용한 기술 컴파일 시점에 끼어들어 특정 애노테이션이 붙은 소스코드를 참조해 다른 소스코드를 생성할수 있는 기능이다. 자바코드, 문서 등을 만들어 낼 수 있다. AST(Abstarct Syntax Tree) 소스코드의 정보를 트리구조로 볼 수 있다. 이를 신텍스 트리라고 한다. 본래는 참조만 가능하다. 논란 거리 공개된 API가 아닌 컴파일러 내부 클래스를 사용하고 기존 소스코드를 조작한다. 특히 이클립스의 경우 java agent를 사용하여 컴파일러 클래스까지 조작하여 사용한다. 해당 클래스들 역..
클래스 프록시 생성하기 서브클래스를 만들수 있는 라이브러리를 사용하여 프록시를 만들 수 있다. CGlib Spring, Hibernate 에서 사용하는 라이브러리다. 하위버전 호환이 좋지 않은 라이브러리이기 때문에 각자 다른 라이브러리에 내장된 형태로 많이 배포된다. CGlib를 사용한 프록시 생성 방법 Enhancer 클래가 CGlib의 핵심 클래스이다. Enhancer의 create 메소드를 사용해 프록시를 생성할 수 있으며, 첫번째 인자로는 상위 클래스 (어떤 클래스의 프록시인가), 두번째인자는 해당 프록시의 handler를 넘겨주면 첫번째 인자의 타입의 프록시 객체가 생성된다. MethodInterceptor 를 통해 handler를 구현할 수 있으며 이는 InvocationHandler와 비슷한..