Spring
@Autowired 생략 가능?
장진혁
2023. 3. 12. 20:36
밑에 코드에는 클래스가 Spring Framework에서 관리되는 Bean이라면,
생성자의 매개변수 타입에 해당하는 Bean을 Spring 컨테이너에서 자동으로 주입해준다.
이것을 Constructor-based Dependency Injection이라고 한다.
@Component
public class JwtUtil {
private final UserRepository userRepository;
private final PostRepository postRepository;
private final CommentRepository commentRepository;
public JwtUtil(UserRepository userRepository, PostRepository postRepository, CommentRepository commentRepository) {
this.userRepository = userRepository;
this.postRepository = postRepository;
this.commentRepository = commentRepository;
}
하지만 생성자가 2개 이상인 경우에는 @Autowired 어노테이션을 명시해주어야 한다.
왜냐하면 Spring Framework에서 어떤 생성자를 사용해야 할지 알 수 없기 때문이다.
밑은 코드는 예시이다.
public class Example {
private Dependency1 dependency1;
private Dependency2 dependency2;
@Autowired
public Example(Dependency1 dependency1) {
this.dependency1 = dependency1;
}
@Autowired
public Example(Dependency1 dependency1, Dependency2 dependency2) {
this.dependency1 = dependency1;
this.dependency2 = dependency2;
}
}