의존관계 주입 방법
@Autowired : 스프링이 스프링 컨테이너에 등록된 빈의 의존성을 주입해 줄 때 사용
1. 생성자 주입
최초에 한번 생성된 후 값이 변경되지 못함 = 불변
필드에 final을 유일하게 가짐 -> 유일하게 객체가 생성될 시점에 의존관계가 주입되면서 필드의 값이 생성
@Autowired
public MyApp(MyService myService) {
this.myService = myService;
}
2. Setter 주입
변경 가능한 의존관계에 사용
@Autowired
public void setMyService(MyService myService) {
this.myService = myService;
}
3. 필드 주입 (사용하지 말 것)
클래스 내부 필드에 주입, Spring없이 순수 자바 코드로는 불가능하기에 @SpringBootTest 테스트 코드에만 사용
@Component
public class MyApp {
@Autowired
private MyService myService; // 필드에 직접 주입
}
의존관계 주입은 생성자 주입을 사용하자
- 생성자 주입을 사용해야 객체 생성시 최초 한 번만 호출하게 되어 의존성을 주입한 객체가 변경될 여지가 없음
- 테스트 코드 작성 시(순수 Java) 객체를 생성할 때, 생성자의 필드를 필수로 입력하게 되므로 실수를 방지
- 객체 지향의 특성을 가장 잘 이용함
- @RequiredArgsConstructor 사용할 것 ( final 붙은 필드를 모아서 생성자 주입 )
수동 Bean 등록을 사용하는 경우 (@Configuration에서 @Bean)
- 외부 라이브러리나 객체를 Spring Bean으로 등록할 때 -> 자동 등록 불가
- 데이터베이스 연결과 같이 비지니스 로직을 지원하는 기술 사용
- 같은 타입의 Bean 여러개 중 하나를 명시적으로 선택할 때
'Spring' 카테고리의 다른 글
일정 관리 서버 Develop 설계 (API 명세서, ERD 작성) (0) | 2025.02.11 |
---|---|
Spring Validation (1) | 2025.02.06 |
Spring Container와 Spring Bean (1) | 2025.02.05 |
SOLID 원칙과 다형성의 한계(OCP, DIP) (1) | 2025.02.05 |
연관관계 설정, 페이징, @ExceptionHandler를 적용한 일정 관리 서버 리팩토링 (1) | 2025.02.04 |