본문 바로가기

전체글236

[스프링 핵심 원리 - 기본편] 애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일시 타입 체크가 안됩니다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있습니다. @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 Rate.. 2021. 9. 20.
[스프링 핵심 원리 - 기본편] @Autowired 필드 명, @Qualifier, @Primary 조회 대상 빈이 2개 이상일 때 해결 방법 @Autowired 필드 명 매칭 @Qualifier -> @Qualifier끼리 매칭 -> 빈 이름 매칭 @Primary 사용 @Autowired 필드 명 매칭 @Autowired는 타입 매칭을 시도하고, 이때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 빈 이름을 추가 매칭합니다. 필드 명을 빈 이름으로 변경 @Autowired private DiscountPolicy rateDiscountPolicy 필드 명이 rateDiscountPolicy이므로 정상 주입됩니다. 필드 명 매칭은 먼저 타입 매칭을 시도 하고 그 결과에 여러 빈이 있을 때 추가로 동작하는 기능입니다. @Autowired 매칭 정리 1. 타입 매칭 2. 타입 매칭의 결과가 2개 이상일 .. 2021. 9. 20.
[스프링 핵심 원리 - 기본편] 조회 빈이 2개 이상 - 문제 @Autowired는 타입(Type)으로 조회합니다. @Autowired private DiscountPolicy discountPolicy 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작합니다. (실제로는 더 많은 기능을 제공합니다.) ac.getBean(DiscountPolicy.class) 스프링 빈 조회 시 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생합니다. NoUniqueBeanDefinitionException 오류가 발생합니다. NoUniqueBeanDefinitionException: No qualifying bean of type 'hello.core.discount.DiscountPolicy' available: expected single matching be.. 2021. 9. 20.
[스프링 핵심 원리 - 기본편] 롬복과 최신 트랜드 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 생성자에 final 키워드를 사용하게 됩니다. 그래서 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 합니다. 기본 코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepo.. 2021. 9. 20.