시냅스

Java Annotation Processor 정리 본문

Java, Spring

Java Annotation Processor 정리

ted k 2023. 2. 11. 10:39

Annotation Processor

  • 컴파일 단계에서 유저가 정의한 어노테이션의 소스 코드를 분석, 처리하기 위해 사용되는 Hook
  • 자바 컴파일러의 플러그인 일종
  • 컴파일 에러나 컴파일 경고를 만들어 냄
  • 자바 컴파일러에 의해 소스코드(.java) 와 바이트코드(.class)를 내보내기도 한다.
  • annotation processor를 통해서 메소드, 필드 등을 생성, 수정하거나 인터페이스만을 가지고도 구현부를 생성해줄 수 있다.
  • 장정
    • 런타임 전에 컴파일 단계에서 수행되기 때문에 비용이 제로에 가깝다.
    • 리플렉션을 사용하지 않아 런타임 시에 예외를 발생시키지 않는다.
    • Boilerplate code를 생성해준다.
  • 단점
    • 기존 클래스 파일에 소스(AST)를 변경할 때는 일종의 해킹이다.

ast

 

 

프로세싱 단계

  1. 자바 컴파일러가 애노테이션 프로세서에 대한 정보를 알고 있는 상태에서 컴파일 수행(extends AbstractProcessor)
  2. 실행되지 않은 애노테이션 프로세서 수행
  3. 프로세서 내부에서 애노테이션이 달린 Element(변수, 메소드, 클래스 등)에 대한 처리
  4. 컴파일러나 애노테이션 프로세서가 실행되었는지 확인하고, 그렇지 않다면 반복 작업
    1. 스프링 시큐리티의 filterchain과 유사하다

 

Comments