본문 바로가기

웹개발/Spring

[Spring] Annotation을 알아보자 - 2. Annotation은 어떻게 처리될까?

이번 글은 https://medium.com/@jintin/annotation-processing-in-java-3621cb05343a의 도움을 많이 받았습니다.

 

1. 우선 Class나 Methods, parameters 혹은 Annotation의 Annotation에 따라 Annotation Class를 만든다.

2. Annotation Parser Classes를 생성한다.

3. Project에 Annotation들을 추가한다.

4. Compile을 시작하고 Annotation parser가 Annotation을 관리한다.

5. 자동 생성된 클래스들이 build 폴더에 추가된다. 

 

예를 들어봅시다.

 

@Controller // Controller Annotation이 있으면 관련 객체를 생성해서 Spring Container에 얘를 넣어둠
public class MemberController {

    MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

javax.annotation.processing 이라는 Package가 있다. 이 Package에서 annotation 처리에 대한 API를 제공한다. https://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/package-summary.html

 

javax.annotation.processing (Java Platform SE 7 )

Package javax.annotation.processing Description Facilities for declaring annotation processors and for allowing annotation processors to communicate with an annotation processing tool environment. Unless otherwise specified in a particular implementation,

docs.oracle.com

그 중에서 AbstractProcessor는 JVM의 Compile Pipeline에 삽입할 수 있는 플러그인이다. 이 플러그인은 코드를 검사한 후 새로운 코드를 만들 수도 있다. 이러한 프로세서를 통해 Annotation은 처리된다.