목록전체 글 (88)
꼬물꼬물
조회한 빈이 모두 필요할 때, List, Map 의도적으로 해당 타입의 스프링 빈이 다 필요한 경우가 있다. ex) 할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 "전략 패턴"을 간단하게 구현할 수 있다. public class AllBeanTest { @Test void findAllBean(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member memb..

조회 빈이 2개 이상 - 문제 private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Autowired는 Type으로 조회한다. == ac.getBean(DiscountPolicy.class); 타입으로 조회하면 선택된 빈이 2개 이상일 때, 문제가 발생한다. DiscountPolicy의 하위 타입인 FixDiscountPolicy와 RateDiscou..

개발을 해보면, 대부분이 다 불변이고 생성자에 final 키워드를 사용하게 된다. 생성자도 만들고, 주입 받은 값을 대입하는 코드도 만들어야한다 -> 필드 주입처럼 편리하게 사용할 수 없을까? 기본코드 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired // 생성자가 하나라면 @Autowired 생략가능 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPol..

옵션 처리 주입할 스프링 빈이 없어도 동작해야할 때가 있다. 그런데 @Autowired만 사용하면 required 옵션 기본값이 true로 되어 잇어서 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법 @Autowired(reqiured=false): 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출되지 않는다. org.springframework.lang.@Nullable: 자동 주입할 대상이 없으면 null이 입력된다. Optional: 자동 주입할 대상이 없으면 Optional.empty가 입력된다. public class AutowiredTest { @Test // bean 등록 테스트 void AutowiredOption(){ ApplicationContex..