[spring] 다양한 의존성 주입 방법
Spring Framework의 핵심기술 중 하나 DI(Dependency Injection, 의존성 주입).
의존성 주입은 여러방식으로 존재한다.
- 생성자 주입
- 수정자 주입
- 필드 주입
생성자 주입
클래스의 생성자를 통해 의존성을 주입하는 방식.
1 2 3 4 5 6 7 8 9 10 11 12 | @Service public class UserService { private UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } } | cs |
- 생성자가 1개라면 @Autowired 는 생략될 수 있다.(스프링 4.3 ~)
수정자 주입
해당 필드의 setter메서드를 정의하여 의존성 주입하는 방식.
1 2 3 4 5 6 7 8 9 10 11 12 | @Service public class UserService { private UserRepository userRepository; @Autowired public UserRepository setUserRepository(UserRepository userRepository){ this.userRepository = userRepository; } } | cs |
- 주입받는 객체가 변경 가능성이 있는 경우.(테스트 시)
필드주입
필드에 직접 @Autowired 어노테이션을 명시하여 의존성 주입.
일반적으로 여러 의존성 주입 방식중에서 생성자 주입 사용을 권장한다.
1. 스프링컨테이너와의 결합도가 낮아져서 테스트에 용이하다.
2. 순환참조(객체가 서로를 참조)를 방지할 수 있다.
3. final 필드로 초기화하여 불변성을 가진다.
lombok의 @RequiredArgsConstructor 어노테이션과 final 키워드를 사용하여 생성자 주입을 코드 최소화하여 작성할 수 있다.
댓글
댓글 쓰기