1. 생성자 주입
- 생성자를 통해서 의존관계를 주입한다.
- 생성자 호출 시점에 딱 1번만 호출이 된다. 그렇기 때문에 불변, 필수 의존관계에서 사용된다.
- 생성자가 1개만 있을 경우 @Autowired 애노테이션을 생략해도 DI가 이뤄진다.
- 필드에 final 키워드를 사용할 수 있다. 그렇기 때문에 생성자에서 값이 설정되지 않는 오류를 컴파일 시점에서 확인할 수 있다. 참고로, 나머지 주입 방식은 모두 생성자 이후에 호출되기 때문에 final 키워드를 사용할 수 없다.
@Service
public class testService {
private final TestRepository testRepository;
@Autowired
public testService(TestRepository testRepository) {
this.testRepository = testRepository;
}
}
1.1 Lombok library가 제공하는 @RequiredArgsConstructor 애노테이션을 이용한 생성자 주입
- final 키워드 혹은 @NonNull 애노테이션이 붙은 필드를 모아서 생성자를 자동으로 만들어주고 의존관계를 주입한다.
@Service
@RequiredArgsConstructor
public class TestService {
private final TestRepository testRepository;
}
2. 수정자(Setter) 주입
- 필드 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입한다.
- 선택, 변경 가능성이 있는 의존관계에서 사용된다.
@Service
public class TestService {
private TestRepository testRepository;
@Autowired
public void setTestRepository(TestRepository testRepository) {
this.testRepository = testRepository;
}
}
3. 필드 주입
- 필드에 바로 의존관계를 주입한다.
- 코드가 간결하다는 장점이 있지만, 외부에서 변경이 불가능하기 때문에 테스트가 어렵다는 단점 또한 존재한다.
@Service
public class TestService {
@Autowired
private TestRepository testRepository;
}
4. 일반 메서드 주입
- 일반 메서드를 통해서 주입한다.
- 한 번에 여러 필드를 주입할 수 있다.
@Service
public class TestService {
private TestRepository testRepository;
@Autowired
public void init(TestRepository testRepository) {
this.testRepository = testRepository;
}
}
참고
- 『스프링 핵심 원리 - 기본편』
'Spring' 카테고리의 다른 글
의존관계 주입 시 bean이 2개 이상일 때 해결 방법 (0) | 2021.10.11 |
---|---|
Lombok library가 제공하는 애노테이션 (0) | 2021.10.11 |
Spring container에 bean을 등록하는 2가지 방법 (0) | 2021.10.09 |
IoC, DI, Bean, Container (0) | 2021.10.08 |
Spring boot welcome page 설정 (0) | 2021.10.07 |