작성
·
245
2
안녕하세요! 강의 너무 재미있게 잘 듣고 있습니다ㅎㅎ 공부를 하다보니 혼란스러운 점이 몇가지 있어 제가 이해한 것이 맞는지, 그리고 추가적으로 궁금한 점에 대해 질문을 하려고 합니다. 질문이 조금 많은 점 양해부탁드립니다.
1. 빈을 등록한다는 것과 빈을 생성한다는 것은 다른 의미인가요??
만약 그렇다면, 빈을 등록하는 과정에서 "빈 객체를 생성하는 것 -> 빈을 생성하는 것"으로 표현한 것인가요?? 즉, 빈 등록 과정 안에 빈을 생성하는 것이 포함된 개념인가요???
2. 싱글톤 빈에 대해 제가 이해한 바가 맞나요??
이전에 했던 예제들은 모두 싱글톤 빈이었기 때문에, new AnnotationConfigApplicationContext(..) 로 스프링 컨테이너를 생성할 때, 컴포넌트 스캔으로 빈이 자동 등록되는 과정에서 스프링 빈 객체도 모두 생성된다고 이해했습니다. 그래서 아래 그림과 같이 스프링 빈을 등록하면 스프링 컨테이너에 빈 이름, 빈 객체가 존재하게 됩니다. (아래 그림은 6.컴포넌트 스캔-컴포넌트 스캔과 의존관계 자동 주입 시작하기 강의자료에 있는 그림입니다.)
3. 저도 프로토타입 빈에 대해 아래 링크의 질문과 같은 의문이 들었는데, 이해가 잘 가지 않아 질문드립니다. https://www.inflearn.com/questions/398554
프로토타입 빈의 경우에는 스프링 컨테이너를 생성할 때가 아닌, 빈을 조회할 때 생성된다고 배웠습니다. 답변에있는 프로토타입 빈을 생성할 때 해당 빈의 BeanDefinition정보를 바탕으로 생성하고 컨테이너에서 별도로 관리하지 않는다는 의미가 구체적으로 어떤 것인지 이해가 잘 안가네요ㅠㅠ 클라이언트가 ac.getBean(PrototypeBean.class)로 조회요청-> 빈 객체를 생성하고 난 후 빈 객체의 참조값을 클라이언트에게 반환 -> 위 그림처럼 빈 객체 부분에 값을 유지하지 않는다는 것인가요??
그리고 프로토타입 빈이 스프링 컨테이너에 빈 등록이 되어있기는 하지만, 빈을 조회하기 전까지는 스프링 컨테이너에 빈 객체가 생성되지 않은 상태(아래 그림처럼 빈 객체 부분이 텅 빈 상태)로 존재한다는 것인지 궁금합니다.
빈 이름 빈 객체
prototypeBean
항상 친절하게 답변해주셔서 감사드려요^^
1. 3번 답변에 대해 제가 맞게 이해한건가요? (편의상 프로토타입 스코프 빈을 프로토타입 빈이라고 하겠습니다)
프로토타입 빈을 getBean()으로 조회 -> 스프링 컨테이너에서 프로토타입 빈 생성, 스프링 컨테이너에 저장X -> 생성한 프로토타입 빈의 참조값을 반환
만약에 위에서 생성된 빈의 참조값을 아래 코드와 다르게 저장해놓지 않는다면, 해당 빈은 어딘가에 생성되어 있겠지만 접근할 수 있는 방법은 없다는 것이겠죠? (매번 조회할 때마다 새로운 빈을 생성해서 값을 던져주므로 getBean()을 하면 이전에 생성된 빈이 아닌 새롭게 생성된 빈의 참조값을 얻게되기 때문에)
2. 그럼 request 스코프 빈 역시 프로토타입 빈과 마찬가지로 스프링 컨테이너에 생성한 빈을 저장해두지 않는 건가요??
질문이 너무 많은 것 같아 죄송합니다ㅠ