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;
    }
}