애노테이션 직접 만들기
- @Qualifier("mainDiscountPolicy")처럼 문자를 직접 적으면 컴파일 시 타입 체크가 안 된다는 단점이 있음(오타가 나도 실행 전까지 모름).
- 이를 해결하기 위해 애노테이션을 직접 만들어 사용하면 컴파일 타임에 오류를 잡을 수 있고 코드도 훨씬 깔끔해짐
1. 커스텀 애노테이션 생성
@Qualifier를 포함한 새로운 애노테이션을 정의
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("mainDiscountPolicy") // Qualifier 기능을 포함시킴
public @interface MainDiscountPolicy {
}
2. 빈 등록 및 주입에 적용
빈 등록 시
@Component
@MainDiscountPolicy // 직접 만든 애노테이션 적용
public class RateDiscountPolicy implements DiscountPolicy {}
주입 시 (생성자/수정자)
// 생성자 자동 주입
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@MainDiscountPolicy DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
// 수정자 자동 주입
@Autowired
public void setDiscountPolicy(@MainDiscountPolicy DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
3. 주요 특징 및 주의사항
- 스프링의 지원: 원래 애노테이션에는 상속이라는 개념이 없습니다. 여러 애노테이션을 모아서 사용하는 이 기능은 스프링이 지원하는 기능입니다.
- 조합 가능: @Qualifier뿐만 아니라 @Autowired 등 다른 애노테이션들도 조합해서 재정의할 수 있습니다.
- 주의점: 무분별한 재정의는 유지보수에 혼란을 줄 수 있으므로, **뚜렷한 목적(예: 타입 안정성 확보)**이 있을 때만 사용하는 것이 좋습니다.
💡 Lombok 사용 시 팁
Lombok의 @RequiredArgsConstructor를 사용할 때는 lombok.config에 해당 애노테이션을 추가해야 생성자 파라미터로 정상 복사
# lombok.config
lombok.copyableAnnotations += hello.core.annotation.MainDiscountPolicy
'INFLEARN' 카테고리의 다른 글
| [스프링 핵심 원리 - 기본편] 16. 빈 생명주기 콜백 (0) | 2026.03.24 |
|---|---|
| [스프링 핵심 원리 - 기본편] 15. 조회한 빈이 모두 필요할 때: List, Map 활용 (0) | 2026.03.21 |
| [스프링 핵심 원리 - 기본편] 13. 조회 Bean이 2개 이상일 경우(@Qualifier vs @Primary) (0) | 2026.03.20 |
| [스프링 핵심 원리 - 기본편] 12. Lombock 라이브러리 (0) | 2026.03.20 |
| [스프링 핵심 원리 - 기본편] 11. 의존관계 자동 주입의 4가지 방법 (0) | 2026.03.20 |