세 줄 요약
롬복에서 지원하는 생성자 DI를 위한 어노테이션
스프링 4.3부터 해당 어노테이션으로 더욱 간단하게 DI 가능
final 혹은 @NonNull이 붙은 필드에 대해서만 적용됨
의존성 주입 (DI)
* DI(Defendency Injection)?
: 객체를 생성해줌으로써 의존관계가 성립되는 것을 의미. XML 파일을 통해 직접 설정하거나, @Autowired 어노테이션을 사용해 주입.
1) 생성자(Constructor) 주입
@Controller
public class DummyController {
private DummyService dsvc;
@Autowired // 생성자 주입
public DummyController(DummyService dsvc) {
this.dsvc = dsvc;
}
}
2) 수정자(Setter) 주입
@Controller
public class DummyController {
private DummyService dsvc;
@Autowired // Setter 주입
public void setDsvc(DummyService dsvc) {
this.dsvc = dsvc;
}
}
3) 필드(Field) 주입
@Controller
public class DummyController {
@Autowired // 필드 주입
private DummyService dsvc;
}
생성자 주입을 권장하는 이유?
* 스프링에선 아래와 같은 이유로 생성자 주입을 권장함
생성자 주입의 장점
1) 불변 객체
2) not null 보장
3) 코드 호출 시 완전히 초기화 되어 전달
4) 순환참조방지
@RequiredArgsConstructor
생성자 생략
스프링 4.3부턴 생성자 선언이 하나만 된 상태라면 생성자 생략가능.
단, 여러 개의 생성자가 선언된 상태라면 반드시 하나는 @Autowired 어노테이션이 붙어야 함.
@RequiredArgsConstructor
final 혹은 @NonNull이 붙은 필드에 대해 자동으로 생성자를 생성해 DI 시전하는 어노테이션 (from 롬복 라이브러리)
즉, 스프링 4.3부턴 생성자 생략 → 롬복과 결합 → 생성자 주입 방식을 필드 주입 방식과 유사하게 사용 가능
생성자 주입(+ @RequiredArgsConstructor)
@Controller
@RequiredArgsConstructor
public class DummyController {
@Autowired // 생성자 주입(with 롬복)
private final DummyService dsvc;
}
'Spring-Java > Spring' 카테고리의 다른 글
전역 예외 핸들러와 예외 처리 전략 (@ControllerAdvice, @ExceptionHandler) (1) | 2024.04.26 |
---|---|
@Valid, @Validated (0) | 2024.04.25 |
@RequestBody, @ResponseBody (feat.@ModelAttribute) (0) | 2023.12.18 |
@RequestParam (feat.@ResponseBody) (0) | 2023.12.15 |
Day55_HTTP 요청/응답 사이클 (1) | 2023.12.14 |