해결된 질문
작성
·
419
·
수정됨
0
안녕하세요
빈 수동등록과 자동등록 과정에 대해서 질문드립니다.
챕터 4번째인 스프링 컨테이너와 스프링 빈 편의 교재에 나와있는 참고사항에서 궁금한 점이 생겼습니다.
참고 : 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다. 여기서는 이해를 돕기 위해 개념적으로 나누어 설명했다. 자세한 내용은 의존관계 자동 주입에서 다시 설명하겠다.
용어에 대해서 궁금한 점이 있어요. 교재에 나와있는 빈의 생성은 빈의 등록과 같은 의미인가요?
아니면 빈의 생성은 new키워드로 객체를 생성한다는 의미인가요..?
죄송합니다. 이 부분은 쓸 데 없는 질문이지만, 정확한 원리를 모르기 때문에 이러한 단어들의 차이 때문에 혼동이 오는 경우가 있어서요ㅠㅠ.
수동 빈 등록 시 원리가 궁금합니다.
@Bean이 붙은 메서드에서 new 키워드로 객체를 생성하고, return이 되는 객체가 빈으로 등록되는 게 맞나요?
자동 빈 등록 시 원리가 궁금합니다.
@Component가 붙게 되면 해당 클래스 객체를 생성한 뒤에 그 인스턴스를 빈에 등록하는 것이 맞나요?
빈이 등록되는 데에는 순서가 있다고 배웠습니다.
2번 질문에서 제가 여쭤본 것 처럼, 수동 등록은 @Bean이 붙은 메서드에서 자바코드로 의존관계를 주입하고 난 뒤에, return으로 반환되는 객체가 비로소 빈으로 등록되는 건가요? 그러면 교재에 나와있듯이, 의존관계 주입은 return하기 전, 즉 객체생성 시에 이뤄지는 건가요?
반면 @ComponentScan방법인 자동등록은 생성자주입일 때를 제외하면, 모든 방법들이 클래스가 우선 빈으로 등록되고 난 뒤에 의존관계 주입이 이뤄지는 것인가요? 그러니까 객체생성 후, 빈으로 등록이 되고, 의존관계는 그 이후에 의존관계가 주입이 되는건지요.
제가 이런 질문으로 확인하고 싶은 점은 스프링 컨테이너에 빈이 등록되는 정확한 시점을 알기 위함입니다.
수동 등록은 @configuration 클래스의 빈 메서드에서 의존관계를 수동으로 모두 설정 후에 return한 객체가 스프링 컨테이너에 빈으로서 올라가는 것인지.
또
자동 등록은 @Component가 붙은 클래스의 객체를 생성할 때, 생성자 주입이면 의존관계가 우선적으로 주입이 되고 스프링 컨테이너에 빈으로서 등록이 되는지.
또한 @Component방법의 나머지 방법들은 객체의 인스턴스가 우선적으로 스프링 컨테이너에 빈으로서 등록이 되고 난 뒤에 의존관계주입이 일어나는지 그 시점들이 궁금합니다.
답변 부탁드립니다.
답변 1
2
안녕하세요. alkooper5님, 공식 서포터즈 David입니다.
용어에 대해서 궁금한 점이 있어요. 교재에 나와있는 빈의 생성은 빈의 등록과 같은 의미인가요?
아니면 빈의 생성은 new키워드로 객체를 생성한다는 의미인가요..?
=> 빈의 등록은 빈을 생성하여 스프링 컨테이너에 추가하는 과정을 말합니다.
수동 빈 등록 시 원리가 궁금합니다. @Bean이 붙은 메서드에서 new 키워드로 객체를 생성하고, return이 되는 객체가 빈으로 등록되는 게 맞나요?
=> 네, 맞습니다.
자동 빈 등록 시 원리가 궁금합니다. @Component가 붙게 되면 해당 클래스 객체를 생성한 뒤에 그 인스턴스를 빈에 등록하는 것이 맞나요?
=> 네, 맞습니다.
빈이 등록되는 데에는 순서가 있다고 배웠습니다. 2번 질문에서 제가 여쭤본 것 처럼, 수동 등록은 @Bean이 붙은 메서드에서 자바코드로 의존관계를 주입하고 난 뒤에, return으로 반환되는 객체가 비로소 빈으로 등록되는 건가요? 그러면 교재에 나와있듯이, 의존관계 주입은 return하기 전, 즉 객체생성 시에 이뤄지는 건가요?
=> 네, 맞습니다. 생성자 주입의 경우 어쩔 수 없이 객체 생성을 위해 의존관계를 주입받아야 하기 때문입니다.
반면 @ComponentScan방법인 자동등록은 생성자주입일 때를 제외하면, 모든 방법들이 클래스가 우선 빈으로 등록되고 난 뒤에 의존관계 주입이 이뤄지는 것인가요? 그러니까 객체생성 후, 빈으로 등록이 되고, 의존관계는 그 이후에 의존관계가 주입이 되는건지요.
=> 네, 맞습니다.
제가 이런 질문으로 확인하고 싶은 점은 스프링 컨테이너에 빈이 등록되는 정확한 시점을 알기 위함입니다. 수동 등록은 @configuration 클래스의 빈 메서드에서 의존관계를 수동으로 모두 설정 후에 return한 객체가 스프링 컨테이너에 빈으로서 올라가는 것인지. 또 자동 등록은 @Component가 붙은 클래스의 객체를 생성할 때, 생성자 주입이면 의존관계가 우선적으로 주입이 되고 스프링 컨테이너에 빈으로서 등록이 되는지. 또한 @Component방법의 나머지 방법들은 객체의 인스턴스가 우선적으로 스프링 컨테이너에 빈으로서 등록이 되고 난 뒤에 의존관계주입이 일어나는지 그 시점들이 궁금합니다.
=> 이런 시점을 학습할 수 있는 가장 좋은 방법은 빈 자동 등록 설정, 빈 수동 등록 설정 후 코드를 하나씩 디버깅하면서 살펴보는 것입니다. 강의 내에서는 이 모든 것을 자세하게 다룰 수 없는 점 참고해 주세요.
감사합니다.
넵! 답변 감사드립니다.