본문으로 바로가기

[스프링] 13.DI 주입의 3가지 방법

category SPRING/스프링 2021. 4. 27. 21:31
728x90
반응형
SMALL

1.생성자 주입

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

2.필드 주입

@Controller
public class MemberController {

    @Autowired
    private final MemberService memberService;
   
}

3.Setter 주입

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public void setMemberService(MemberService memberService){
    	this.memberService = memberService;
    }
}

 

요즘의 트랜드는 생성자 주입을 선호한다고 한다.


Test 실행시 스프링 컨테이너의 도움없이 MemberService가 가지고 있는 여러 Repository를 자유롭게 변경하면서 테스트 할수 있어야한다.

그런데 필드 주입을 사용하면, 스프링 컨테이너가 없을때 의존하는 객체를 변경할 수 있는 방법이 없다.

 

생성자 주입은 스프링 컨테이너 도움 없이 직접 new MemberService(new XxxRepository)와 같은 식으로 스프링 컨테이너의 도움 없이 원하는 객체를 변경하여 테스트 하거나 실행할 수 있다.

Setter 주입의 경우 누군가가 호출시 public으로 열려있어야 하기 때문에 노출이 되며, 애플리케이션 로딩 시점에서 조립할때 바꿔줘야 하는데 Setter를 이용하여 중간에 바꿀 일은 매우 드물기 때문에

728x90
반응형
LIST