0. 개요
- 이전 포스팅에서 Bean이 2개 이상인 경우를 해결하는 방법으로 @Qualifier를 언급했다.
- 그러나 @Qualifier를 사용하면 컴파일 시 문제가 발생한다.
- 이를 해결하는 방법으로 어노테이션을 직접 생성하는데, 이에 대해 알아보자.
1. Annotation을 생성하는 방법
a) @Qualifier의 컴파일 시 문제점
- @Qualifier는 다음과 같이 명시한다.
@Qualifier("이름")
- 이처럼 명시를 하는데, 문제는 이름을 표현하는 문자열(= "이름")에 있다.
- 해당 문자열은 컴파일 과정에서 Bean의 타입으로 인식되지 않는다.
- 이를 해결하기 위한 방법으로 직접 Annotation을 생성한다.
b) Annotation 생성 방법
- 우선, 어노테이션 파일을 생성한다.
public @interface TestAnnotation {}
- 그리고 @Qualifier 클래스의 모든 어노테이션을 동일하게 명시한다.
- @Qualifier 클래스에는 다음과 같은 어노테이션을 가지고 있다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {
String value() default "";
}
- 이를 새로 생성한 어노테이션 클래스에 동일하게 적용하고, @Qualifier 또한 명시한다.
- 이때 @Qualifier("이름")에는 클래스 이름과 동일한 이름을 사용하는데, 첫 글자를 소문자로 명시한다.
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Qualifier("testAnnotation")
public @interface TestAnnotation {}
- 이렇게 어노테이션의 생성이 완료되었다.
- 이제는 @Qualifier를 사용한 부분에 생성한 어노테이션을 적용하면 된다.
c) Annotation의 기본개념
- 어노테이션은 자바의 기술이다.
- 하지만, Spring 프로젝트에서 사용하는 대부분의 어노테이션은 Spring이 제공한다.
- 즉, Spring이 만들어 놓은 어노테이션이다.
- 위에서 어노테이션을 만든 방식처럼, 다양한 어노테이션을 조합하여 새로운 어노테이션을 만들 수 있다.
- 다만, Annotaion이 자바의 기술이라는 이유로 상속의 개념이 존재한다고 추측하지 말자.
- 어노테이션은 상속이 없다.
d) 언제 어노테이션을 생성해야 할까?
- 대부분의 문제는 Spring에서 제공하는 어노테이션으로 해결할 수 있다.
- 위에서는 @Qualifier의 문제를 해결하기 위해 직접 어노테이션을 생성해보았지만,
Spring은 @Qualifier를 대신할 수 있는 다양한 어노테이션을 제공하므로, 이를 활용하도록 하자.
- 무분별한 어노테이션 생성은 오히려 유지보수를 힘들게 할 뿐이기 때문이다.
'Back-end > Spring 개념' 카테고리의 다른 글
16. Bean Scope에 대하여 (0) | 2022.02.17 |
---|---|
15. Bean 생명주기 콜백 (0) | 2022.02.16 |
13. @Autowired의 다양한 문제 해결방법 (0) | 2022.02.14 |
12. Dependency Injection 방법 (0) | 2022.02.11 |
11. Dependency Injection 기본개념 (0) | 2022.02.10 |
댓글