[inflearn] 스프링 핵심 원리 - 기본편/섹션 7 - 의존관계 자동 주입7 7-6. 해당 타입의 빈이 모두 필요한 경우 같은 타입의 빈 여러개 중 어느 하나만 필요한 경우도 있지만, 반대로 해당 타입의 빈이 모두 필요한 경우도 있다. 클라이언트의 선택에 따라 다르게 동작하도록 구현하는 전략 패턴이 대표적인 예시다. 예를 들어, 사용자가 고정 할인과 비율 할인 중 선택할 수 있다고 한다면, OrderService는 fixDiscountPolicy, rateDiscountPolicy 두개의 빈이 모두 필요하다. 방법방법은 간단하다. 받으려는 타입의 빈을 List나 Map으로 받으면, 해당 타입의 빈을 모두 전달(주입)받을 수 있다. DiscountPolicy 타입의 빈을 모두 받는 Service 클래스를 하나 생성한다.calcDiscount() 메서드에서 policyCode를 전달받아 코드마다 다른 할인 정책을 적용하도록 .. 2024. 5. 26. 7-5-1. 어노테이션을 만들어 지정 @Qualifier를 이용한 구분자 추가 방법은 오타 등 타입 체크가 되지 않는다는 문제가 있었다. @Qualifier를 포함한 어노테이션을 직접 만들어 사용하면 이러한 문제를 해결할 수 있다. 주로 사용할 빈에 붙여줄 @MainDiscountPolicy를 만든다.@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documented@Qualifier("mainDiscountPolicy")public @interface MainDiscountPolicy {} @Ta.. 2024. 5. 26. 7-5. 중복 빈 처리 방법 @Autowired는 주입할 빈을 타입으로 찾는다. 예를 들어 코드가 다음과 같을 때, 스프링 컨테이너는 DiscountPolicy 타입의 빈을 찾아 주입하는 방식이다.@Autowiredprivate DiscountPolicy discountPolicy 등록된 빈 중에서 타입이 DiscountPolicy인 빈이 하나밖에 없다면 문제되지 않겠지만,아래처럼 같은 타입의 빈이 여러개 등록되어 있다면 오류 (NoUniqueBeanDefinitionException)가 발생한다.@Componentpublic class FixDiscountPolicy implements DiscountPolicy {}@Componentpublic class RateDiscountPolicy implements DiscountPol.. 2024. 5. 26. 7-4. 롬복 라이브러리 빈의 구성 방식은 대부분 비슷하기 때문에, 생성자 작성과 의존성 주입 코드 작성은 생각보다 반복적인 작업이다. 롬복 라이브러리를 이용하면 이러한 작업을 간편하게 수행할 수 있다. 롬복 적용 방법 (IntelliJ IDEA 기준)build.gradle에 라이브러리와 환경 설정을 추가한다.plugins { ...}group = 'hdxian'version = '0.0.1-SNAPSHOT'java { ...}// lombok 설정 추가 (시작)configurations { compileOnly { extendsFrom annotationProcessor }}// lombok 설정 추가 (끝)repositories { ...}dependencies { ... .. 2024. 5. 26. 이전 1 2 다음