자동 구성 기반 애플리케이션 ( @AutoConfiguration )
메타 애너테이션
메타 애너테이션 장점
- 메타 애너테이션이 붙은 클래스를 사용하면 메타 애너테이션이 적용된 것과 기능적인 면에서 차이가 없음
- 다른 이름을 부여하는 경우(예. MyComponent)
- 스프링의 빈으로 등록되는지, 웹 MVC의 컨트롤러 역할을 하는지, 비즈니스 로직을 담당하는 서비스로의 역할을 하는지 추가 정보를 얻을 수 있음
- 애너테이션 자체가 달라지기 때문에 부가적인 효과 기대 가능
- @Controller 애너테이션이 붙어있으면 DispatcherServlet이 웹 컨트롤러로 사용되어지는지, 애너테이션을 이용한 맵핑 정보가 들어있는지 판단하고 RequestMapping, GetMapping 등을 찾아봄
- 메타 애너테이션에 없던 새로운 Element를 추가할 수 있음 → 애너테이션 기능 확장 사용 가능
주의
메타 애너테이션을 상속 개념과 혼동하면 안됨
- 애너테이션 자체에 상속이라는 개념이 없음
- 인터페이스처럼 다른 인터페이스를 extends하는 개념이 아님
- 모든 애너테이션이 다 메타 애너테이션이 될 수 없음
- 애너테이션에는 Retention과 Target이라는 정보를 꼭 줘야 됨
- Target이 중요한 이유는 애너테이션이 적용되어 질 수 있는 위치가 많기 때문에 그 중 애너테이션 타입이라는 위치에 사용할 수 있어야지만 메타 애너테이션이 될 수 있음
- 정말 빨리 작동하는 단위 테스트임을 알리고 싶은경우 위와 같은 방식으로 메타 애너테이션을 정의해서 사용할 수 있음
스프링 부트는 어떻게 메타 애너테이션을 활용하는가
합성 애너테이션( Composed Annotation )
메타 애너테이션을 하나 이상 적용해서 만드는 경우를 합성 애너테이션이라고 함
합성 애너테이션을 사용하면 클래스나 메서드에 부여하는 애너테이션이 가지고 있는 모든 메타 애너테이션들이 전부 적용되어 있는 것과 동일한 효과를 내는 것
애너테이션이 많이 붙게되면서 반복적으로 그 조합을 많이 사용한다면 합성 애너테이션으로 만들어서 간략하게 사용이 가능함
- @Restcontroller = @ResponseBody + @Component
- @Controller = @Document + @Component