공부/Spring
[Spring] Annotation 직접 만들기
sesam
2023. 12. 29. 14:33
728x90
@Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안된다.
다음과 같은 애노 테이션을 만들어서 문제를 해결할 수 있다.
Annotation 직접 만들기
순서1. 자바 클래스를 어노테이션으로 생성해준다.


순서2. @Qualifier를 Annotation으로 만들 것이기 때문에 @Qualifier에 들어가서 위에 부분을 복사해온다.

순서3. 만들고자 했던 Annotation인 @MaindiscountPolicy에 붙여넣는다.
@Qualifier도 사용할 것이기 때문에 추가해준다.
package hello.core.annotataion;
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)
@Documented
@Qualifier("mainDiscountPolicy") // @Qualifier도 사용할 것이기 때문에 추가해준다.
public @interface MainDiscountPolicy {
}
순서 4. Annotaiton 사용
위에서 만든 Annotation인 @MainCiscountPolicy를 사용하고자 하는 곳에 쓰면 된다.
@Qualifier 등록
@Component
@MainDiscountPolicy
public class RateDiscountPolicy implements DiscountPolicy {}
@Qualifier 사용
//생성자 자동 주입
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
//생성자 자동 주입
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
애노테이션에는 상속이라는 개념이 없다.
이렇게 여러 애노테이션을 모아서 사용하는 기능은 스프링이 지원해주는 기능이다.
@Qualifier 뿐만 아니라 다른 애노테이션들도 함께 조합해서 사용할 수 있다.
단적으로 @Autowired 도 재정의 할 수 있다.
물론 스프링이 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 유지보수에 더 혼란만 가중할 수 있다.
728x90