DI12 9-6. 웹 스코프 보호되어 있는 글 입니다. 2024. 7. 28. 7-6. 해당 타입의 빈이 모두 필요한 경우 같은 타입의 빈 여러개 중 어느 하나만 필요한 경우도 있지만, 반대로 해당 타입의 빈이 모두 필요한 경우도 있다. 클라이언트의 선택에 따라 다르게 동작하도록 구현하는 전략 패턴이 대표적인 예시다. 예를 들어, 사용자가 고정 할인과 비율 할인 중 선택할 수 있다고 한다면, OrderService는 fixDiscountPolicy, rateDiscountPolicy 두개의 빈이 모두 필요하다. 방법방법은 간단하다. 받으려는 타입의 빈을 List나 Map으로 받으면, 해당 타입의 빈을 모두 전달(주입)받을 수 있다. DiscountPolicy 타입의 빈을 모두 받는 Service 클래스를 하나 생성한다.calcDiscount() 메서드에서 policyCode를 전달받아 코드마다 다른 할인 정책을 적용하도록 .. 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 3 다음