Field Injection (필드 주입):
필드 주입은 클래스의 필드에 직접 의존성을 주입하는 방식
클래스의 필드에 @Autowired 애노테이션을 사용하여 의존성을 주입
간결하고 편리하지만, 테스트 시에 의존성을 모의(mock) 객체로 대체하기 어렵다는 단점이 존재
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// ...
}
Setter based Injection (Setter 주입):
Setter 주입은 클래스의 Setter 메서드를 통해 의존성을 주입하는 방식
클래스의 필드는 private으로 선언되어 있고, 각 필드에 대응하는 Setter 메서드에 @Autowired 애노테이션을 사용
의존성을 선택적으로 설정할 수 있으므로 유연성이 높다
@Service
public class UserService {
private UserRepository userRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
Constructor based Injection (생성자 주입):
생성자 주입은 클래스의 생성자를 통해 의존성을 주입하는 방식
클래스의 필드는 private으로 선언되어 있고, 생성자 매개변수로 의존성을 받는다
빈의 생성 시점에 모든 필수적인 의존성을 받도록 보장하며, 변경 불가능한 불변성을 유지할 수 있다
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
>> 생성자 주입이 가장 많이 사용되는 이유:
불변성과 필수 의존성 보장: 생성자 주입을 사용하면 빈이 생성될 때 필요한 모든 의존성을 전달받도록 보장할 수 있는데, 의존성이 누락되거나 불완전한 상태로 빈이 생성되는 문제를 방지할 수 있고 생성자 주입을 통해 의존성이 변경되지 않는 불변성을 유지할 수 있기 때문에
클래스 내부 의존성 명시화: 생성자 주입은 클래스의 의존성을 외부에 명시적으로 드러내는 효과가 있어서 클래스의 생성자 시그니처를 통해 필요한 의존성이 무엇인지 쉽게 파악할 수 있다.
선택적인 불변성: 생성자 주입은 빈이 생성된 후에는 의존성을 변경할 수 없으므로, 빈의 불변성을 유지하면서도 필요한 의존성을 설정할 수 있다
'의문점 공부하기 > 📌 Java' 카테고리의 다른 글
📌 301과 302 상태 코드의 의미와 차이는? (0) | 2023.08.30 |
---|---|
📌 throw와 throws의 차이가 있는걸까? (0) | 2023.08.24 |
📌 XSS 공격이 무엇이고, 어떻게 피할 수 있을까!?!? (0) | 2023.08.21 |
📌 SQL Injection을 피할 수 있는 방법은 뭐가 있을까?? (0) | 2023.08.18 |
📌 스프링 MVC와 struts의 차이에 대하여 (0) | 2023.08.16 |