[spring] 다양한 의존관계 주입 (DI) 방법

이준규·2022년 1월 30일
0

백엔드

목록 보기
8/13
  • 생성자 주입

    • 불변, 필수 의존관계에 주로 사용
    • final 사용 가능 / 컴파일 오류 유도가능
    • 생성자가 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;
   }
}
  • 수정자주입 (setter)

    • 선택, 변경 가능성이 있는 의존관계
       @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;
        }
      }


- 필드 주입

  - 외부에서 변경이 불가능해서 테스트가 힘듦
  - 테스트목적의 특별한 용도에서 사용(코드가 짧음)
  - DI 프레임워크가 없으면 아무것도 안됨
  - 사용 비추천

```java
@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;
 }
}
profile
백엔드

0개의 댓글