티스토리 뷰

Java

Java - 애노테이션 프로세서2

사용자 엔꾸꾸 2019. 11. 18. 22:19

애노테이션 프로세서 2

  • 애노테이션 프로세서를 사용하여 @Magic 애노테이션을 가지고 있는 경우 Moja 타입의 인터페이스를 구현하는 MagicMoja 클래스를 생성해본다.

JavaPoet

  • 새로운 소스코드를 생성할때 매우 유용한 라이브러리가 있다.
  • 매우 직관적인것이 장점.
<dependency>
    <groupId>com.squareup</groupId>
    <artifactId>javapoet</artifactId>
    <version>1.11.1</version>
</dependency>

애노테이션 프로세서 구현하기 2

  • 지난번에 이어 애노테이션 프로세서 구현해보자.

ClassName

  • Element를 TypeElement로 변환한뒤, JavaPoet을 사용하여 ClassName 타입의 객체로 변환한다.
  • 이 타입의 객체는 클래스 정보들을 참조할 수 있다.

MethodSpec

  • 우리가 생성할 클래스의 메소드 스팩을 구현한다.
  • methodBuilder(메소드명): 구현할 메소드의 이름을 정의한다.
  • addModifireds(접근지시자를): 메소드의 접근 지시자를 정의한다.
  • returns: 해당 메소드에서 리턴하는 타입을 정의한다.
  • addStatement: 메소드 내부의 스테이트먼트를 정의한다.
    • return "토끼";
    • 우리는 모자에서 토끼를 꺼내는 마술을 부릴것이기 때문에 토끼를 리턴하도록 한다.
  • build 를 통해 메소드 스팩 구현을 마친다.

TypeSpec

  • 우리가 생성한 클래스의 스팩을 구현한다.
  • classBuilder(클래스명): 구현할 클래스 명을 정의한다. (이때 풀패키지 경로가아닌 심플 네임만 지정해준다.)
  • addSuperInterface(인터페이스): 우리가 생성할 클래스가 구현할 인터페이스에 대한 정보를 정의한다.
  • addModifiers(접근지시자를): 클래스의 접근 지시자를 정의한다.
  • addMethod(메소드스팩): 클래스에 추가할 메소드 스팩을 정의한다. (위에서 정의한 pullOut 메소드를 추가한다.)
  • build 를 통해 클래스 스팩 구현을 마친다.

Filer

  • 소스코드, 클래스 코드 및 리소스를 생성할 수 있는 인터페이스이다.
  • JavaPoet를 사용한다면 보다 쉽게 생성이 가능하다.

애노테이션 프로세서 구현이 끝났다면 이전과 마찬가지로, 빌드를 해준뒤 다시 mvn install을 해주자.

애노테이션 프로세서 사용해보기

  • 다시 이전 프로젝트로 돌아와 메이븐 리프래시를 해주고 빌드를 실행하면 다음과 같이 target/classes/generated-sources/annotations/me/june/MagicMoja 클래스가 생성 된다.

댓글
댓글쓰기 폼
공지사항
Total
68,328
Today
36
Yesterday
123
링크
TAG
more
«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
글 보관함