의존관계 주입 방법

잘하고싶다·2022년 5월 24일
0

spring

목록 보기
4/4

생성자 주입

  • 생성자 호출 시점에서 딱 1번만 호출되는 것이 보장된다.
  • 불변, 필수 의존관계에 사용
  • 생성자가 하나 있으면 @Autowired가 없어도 됌
    @Component
    public class OrderServiceImpl implements OrderService {
          private final MemberRepository memberRepository;
          private final DiscountPolicy discountPolicy;
          
          @Autowired
          public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
              this.memberRepository = memberRepository;
              this.discountPolicy = discountPolicy;
          }
    }

수정자 주입

  • 선택, 변경 가능성이 있는 의존 관계에 사용
@Component
public class OrderServiceImpl implements OrderService {
     private MemberRepository memberRepository;
     private DiscountPolicy discountPolicy;
     @Autowired
     public void setMemberRepository(MemberRepository memberRepository) {
     		this.memberRepository = memberRepository;
     }
     @Autowired
     public void setDiscountPolicy(DiscountPolicy discountPolicy) {
     		this.discountPolicy = discountPolicy;
     }
}

필드 주입

  • 코드가 간결하지만 외부에서 변경이 불가능해서 테스트 하기 힘들다는 치명적인 단점이 있다.
  • 애플리케이션의 실제 코드와 관계 없는 테스트 코드
  • 스프링 설정을 목적으로 하는 @Configuration 같은 곳에서만 특별한 용도로 사용
@Component
public class OrderServiceImpl implements OrderService {
     @Autowired
     private MemberRepository memberRepository;
     @Autowired
     private DiscountPolicy discountPolicy;
}

일반 메서드 주입

  • 한번에 여러 필드를 주입 받을 수 있다.
  • 일반적으로 사용하지 않는다.
    @Component
    public class OrderServiceImpl implements OrderService {
        private MemberRepository memberRepository;
        private DiscountPolicy discountPolicy;
        @Autowired
        public void init(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
            this.memberRepository = memberRepository;
            this.discountPolicy = discountPolicy;
        }
    }

0개의 댓글