- 스프링 메타 애노테이션 이란?
스프링에서는 기본적으로 클래스 선언부 위에 @Component 애노테이션이 붙어 있으면 스프링 빈으로 생성한다.
하지만 실무에서는 다음과 같이 한다.
Controller 클래스에는 @Controller
Service 클래스에는 @Service
DAO 클래스에는 @Repository
위의 3가지 애노테이션도 스프링 빈으로 생성해주는 애노테이션들이다.
분명 위에서 설명하기를 @Component 애노테이션이 스프링 빈으로 생성해준다고 했는데 왜 위의 3가지 애노테이션도 빈으로 생성해 주는 걸까?
이유는 @Component 애너테이션이 메타 에노테이션으로 달려 있기 때문이다.
이말이 무슨 말이냐하면
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface Service {
public String value() default "";
}
위와 같이 Service라는 애노테이션 위에 @Component 애노테이션이 달라 붙어 있다는 말이다.
그래서 @Component 애노테이션을 메타 애노테이션이라고 부른다.
결국 스프링에서는 @Service의 애노테이션을 만나면 그 상위의 애노테이션을 검색하여 @Component가 있는지 찾게 되는 것이다.
만약 있으면 빈 후보
없으면 빈 후보 탈락
- meta annotation에 대해서 부가적인 설명
@Target
- ElementType.TYPE : 클래스, 인터페이스, enum 선언부
- ElementType.CONSTRUCTOR : 생성자 선언부
- ElementType.LOCAL_VARIABLE : 지역 변수 선언부
- ElementType.METHOD : 메소드 선언부
- ElementType.PACKAGE : 패키지 선언부
- ElementType.PARAMETER : 파라미터 선언부
@Retention
- RetentionPolicy.RUNTIME : VM에서 유지 (리플렉션을 이용하여 검색 가능)
- RetentionPolicy.SOURCE : 컴파일 시 class 파일에 추가되지 않는다.
- RetentionPolicy.CLASS : 클래스 안에 애노테이션이 추가되지만 VM에서는 사용되지 않는다.
@Documented
- 해당 어노테이션을 Javadoc에 포함한다.
@Inherited
- 서브 클래스가 부모 어노테이션을 상속받도록 한다.
'프로그래밍' 카테고리의 다른 글
spring 웹 어플리케이션 기반의 web.xml 설정 정리 (0) | 2012.12.05 |
---|---|
fail-fast 방식이란? (0) | 2012.11.27 |
Junit @RunWith @ContextConfiguration에 대해서 (1) | 2012.11.26 |
화면 입력, 수정, 상세 보기 페이지 개발 방법 (0) | 2012.11.22 |
HashMap 메소드 테스트 케이스 작성 (0) | 2012.11.09 |
synchronized 키워드 3가지 테스트 케이스 (0) | 2012.11.09 |
이클립스 junit 특정 메소드만 테스트를 실행하고 싶을 때 (1) | 2012.11.07 |
html table merge (4) | 2012.11.06 |