Spring, java/Spring_core
[Spring core] 의존관계 주입
재코딩
2022. 8. 28. 17:22
반응형
본 리뷰는 인프런 김영한씨의 스프링 핵심원리 - 기본편 리뷰를 한 포스팅입니다.
목차
- 생성자 주입
- 수정자 주입
- 필드 주입
- 일반 메서드 주입
1. 생성자 주입
-. 생성자를 통해서 의존 관계 주입을 받는 방식이다.
-. 특징
1. 생성자 호출 시점에 딱 1번만 보장된다.
2. 불변, 필수 의존관계에 사용된다.
3. 스프링에서는 생성자가 1개만 있다면 @Autowired를 자동으로 주입시켜준다. (스프링 빈에만 해당)
@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
2. 수정자 주입 (Setter 주입)
-. Setter가 필드의 값을 변경하는 수정자 메서드를 통해서 의존 관계를 주입하는 방법이다.
-. 특징: 선택, 변경 가능성이 있는 의존관계에 사용된다.
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy) {
this.discountPolicy = discountPolicy;
}
3. 필드 주입
-. 필드에 바로 주입하는 방법
-. 특징
1. 외부에서 변경이 불가능해서 테스트가 하기 힘들다.
2. DI 프레임워크가 없으면 할 수 있는 것이 없다.
3. @Configuraion 같은 곳에서만 특별 용도로만 사용된다.
4. 웬만하면 사용하지 말자!
@Autowired
private MemberRepository memberRepository;
@Autowired
private DiscountPolicy discountPolicy;
4. 일반 메서드 주입
-. 일반 메서드를 통해서 주입 받을 수 있다.
-. 특징: 메서드 하나를 통해서 여러 필드를 주입 받을 수 있다.
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy
discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
반응형