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이 관리하는 객체에서만 동작한다.