ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 의존관계 자동 주입
    스프링/스프링 기본이론 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;
        ....
    }

     

     

    의존관계를 주입해줄 때는 그냥 생성자 주입을 사용하는게 기능도 좋고, 사용하기도 편하다.

Designed by Tistory.