Spring

의존관계(DI) 설정

yong_ღ'ᴗ'ღ 2022. 12. 11. 04:57

 DI (Dependency Injection) 설정

① 필드 주입

     ◼ IntelliJ에서도 권장하지 않음 (밑줄 쳐짐)

     ◼ 중간에 바꿀 수 있는 방법이 아예 없다.

@Controller
public class MemberController {

    // DI-1) 필드 주입
    @Autowired private MemberService memberService;
    
}

 

② Setter 주입

     ◼ 단점: 누군가가 MemberController를 호출했을 때 setXxx() 가 public으로 열려있어야 한다.

                   setMemberService가 한 번 setting 되면 중간에 바꿀 일이 없는데, public하게 노출되어 있는 상태가 된다.

                   잘못 바꾸면 문제 생겨버린다.

     ◼ 의존관계가 실행 중에 동적으로 변하는 경우는 거의....아예...! 없으므로 생성자 주입을 권장!

@Controller
public class MemberController {

    // DI-2) Setter 주입
    private MemberService memberService;     // 'final' 빼야한다.

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

}

 

③ 생성자 주입   (권장!!)

@Controller
public class MemberController {

    // DI-3) 생성자 주입 (권장!)
    private final MemberService memberService;

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

 

@Autowired를 통한 DI는 Spring이 관리하는 객체에서만 동작한다.