@Qualifier("...")를 사용할 경우 컴파일 타임에서 타입 체크가 안된다. 따라서 애노테이션을 직접 생성해서 문제를 해결할 수 있다. 아래와 같이 새로운 애노테이션 자바 파일을 생성하면, 다른 클래스에서 @CustomAnnotation으로 사용할 수 있게 되고 오탈자 체크가 쉬워진다.
package hello.core.annotation;
import org.springframework.beans.factory.annotation.Qualifier;
import java.lang.annotation.*;
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("CustomAnnotation")
public @interface CustomAnnotation {}
애노테이션은 상속이라는 개념이 존재하지 않는다. 이렇게 여러 애노테이션을 모아 사용하는 기능은 스프링이 지원해주는 기능이다.
@Qualifier말고도 다른 애노테이션도 함께 조합해서 사용할 수 있다. @Autowired도 재정의해서 사용 가능하지만, 원하는 기능과 목적없이 무분별하게 재정의해서 사용하는 것은 유지 보수에 큰 혼란을 야기할 수 있다는 점을 명심해야 한다.