-
의존관계 자동 주입스프링/스프링 기본이론 2023. 1. 31. 14:22
1. 생성자 주입
@Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } // 생성자 주입 -> 추상화에만 의존 }
생성자를 통해서 스프링 컨테이너의 빈들의 의존관계를 주입하는 방법이다.
의존관계를 자동 주입하기를 원할 때 @RequiredArgsConstructor를 사용했다. 어노테이션 하나로 스프링 빈을 주입받을 수 있는 이유는 생성자 주입을 할 때에 생성자가 단 하나면 @Autowired를 생략할 수 있기 때문이다.
가장 좋은 방법
@Component @RequiredArgsConstructor public class OrderServiceImpl implements OrderService{ private MemberRepository memberRepository; private DiscountPolicy discountPolicy; }
가장 많이 쓰이는 방법이기 때문에 개발을 할 때에 생성자 주입을 사용하면 된다.
2. 수정자 주입
@Autowired public void setMemberRepository(MemberRepository memberRepository) { this.memberRepository = memberRepository; } @Autowired public void setDiscountPolicy(DiscountPolicy discountPolicy) { this.discountPolicy = discountPolicy; }
setter라 불리는 필드의 값을 변경하는 수정 메서드를 통해 의존관계를 주입하는 방법이다.
변경이 용이하기 때문에 변경 가능성이 있는 의존관계에 많이 사용되며 @Autowired가 필수이다.
3. 필드 주입
필드에 바로 주입하는 방법인데 외부에서 변경이 불가능하고 DI 프레임워크가 없으면 사용할 수 없다는 단점이 있기 때문에 지금은 사용하지 않는다고 한다.
@Component public class OrderServiceImpl implements OrderService{ @Autowired private MemberRepository memberRepository; @Autowired private DiscountPolicy discountPolicy; .... }
의존관계를 주입해줄 때는 그냥 생성자 주입을 사용하는게 기능도 좋고, 사용하기도 편하다.
'스프링 > 스프링 기본이론' 카테고리의 다른 글
빈 생명주기 콜백 (0) 2023.02.01 빈이 2개 이상일 경우에 의존관계 주입 (0) 2023.02.01 컴포넌트 스캔 (0) 2023.01.30 @Configuration과 싱글톤 패턴 (0) 2023.01.30 스프링을 이용한 싱글톤 패턴 (0) 2023.01.30