Java, Spring
Java Annotation Processor 정리
ted k
2023. 2. 11. 10:39
Annotation Processor
- 컴파일 단계에서 유저가 정의한 어노테이션의 소스 코드를 분석, 처리하기 위해 사용되는 Hook
- 자바 컴파일러의 플러그인 일종
- 컴파일 에러나 컴파일 경고를 만들어 냄
- 자바 컴파일러에 의해 소스코드(.java) 와 바이트코드(.class)를 내보내기도 한다.
- annotation processor를 통해서 메소드, 필드 등을 생성, 수정하거나 인터페이스만을 가지고도 구현부를 생성해줄 수 있다.
- 장정
- 런타임 전에 컴파일 단계에서 수행되기 때문에 비용이 제로에 가깝다.
- 리플렉션을 사용하지 않아 런타임 시에 예외를 발생시키지 않는다.
- Boilerplate code를 생성해준다.
- 단점
- 기존 클래스 파일에 소스(AST)를 변경할 때는 일종의 해킹이다.
프로세싱 단계
- 자바 컴파일러가 애노테이션 프로세서에 대한 정보를 알고 있는 상태에서 컴파일 수행(extends AbstractProcessor)
- 실행되지 않은 애노테이션 프로세서 수행
- 프로세서 내부에서 애노테이션이 달린 Element(변수, 메소드, 클래스 등)에 대한 처리
- 컴파일러나 애노테이션 프로세서가 실행되었는지 확인하고, 그렇지 않다면 반복 작업
- 스프링 시큐리티의 filterchain과 유사하다