-
Spring 기본 26 - 애노테이션 직접 만들기FrameWork/Spring&Spring-boot 2023. 11. 22. 12:55
애노테이션 직접 만들기
@Qualifier("mainDiscountPolicy")이렇게 문자를 적으면 컴파일시 타입 체크가 안된다. 다음과 같은 애노테이을 만들어서 문제를 해결할 수 있다. (문자는 compile 타임에 체크가 되지 않는다.)
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("mainDiscountPolicy") public @interface MainDiscountPolicy { }
@Component @MainDiscountPolicy public class RateDiscountPolicy implements DiscountPolicy{}
//생성자 자동 주입 @Autowired public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } //수정자 자동 주입 @Autowried public DiscountPolicy setDiscountPolicy(@MainDiscountPolicy DiscountPolicy discountPolicy){ return discountPolicy; }
애노테이션에는 상속이라는 개념이 없다. 위와 같이 여러 애노테이션을 모아서 사용하는 기능을 스프링이 지원해주는 기능이다. @Quilifier 뿐만 아니라 다른 어노테이션들도 함께 조합해서 사용할 수 있다. 단적으로 @Autowried도 재정의 할 수있다. 물론 스프링에서 제공하는 기능을 뚜렷한 목적 없이 무분별하게 재정의 하는 것은 보수유지에 혼란을 가중할 수 있다.
[출처 - 스프링 핵심 원리 - 기본편]
'FrameWork > Spring&Spring-boot' 카테고리의 다른 글
Spring 기본 28 - 자동, 수동 올바른 실무 운영 기준 (1) 2023.11.28 Spring 기본 27 - 조회한 빈이 모두 필요할 때, List,Map (1) 2023.11.28 Spring 기본 25 - 조회 빈 2개 이상(@Autowired필드 명,@Quilifier,@Primary) (1) 2023.11.22 Spring 기본 24 - 롬복과 최신 트렌드 (0) 2023.11.21 스프링 기본 23 - 생성자 주입을 선택해라 (0) 2023.11.21