해결된 질문
작성
·
106
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예
[질문 내용]
강의 프로토타입 예시에 프록시를 적용해 보았습니다.
의도한 대로 다른 인스턴스를 호출해주는 것 까진 되는 걸 확인했습니다.
다만 로그에 CGLIB라는 라이브러리로 상속 받은 가짜 프록시 객체라고 나오지 않는 것 같고, addCount 로직이 적용이 되지 않는 것 같습니다
프로토타입 빈에는 프록시를 적용하면 안되는 걸까요? 왜그런걸까요
답변 2
0
안녕하세요. 김상형님
최신 버전의 스프링에서는 CGLIB 클래스를 출력할 때 마지막에 참조값 대신에 $$SpringCGLIB$$0, $$SpringCGLIB$$1과 같이 0, 1, 2 등의 숫자가 출력됩니다. 이 부분은 조만간 메뉴얼에 업데이트를 해야겠네요 🙂
지금과 같이 프록시를 사용하면 메서드를 호출할 때 마다 스프링 컨테이너에게 새로운 PrototypeBean 생성을 요청하게 됩니다. 예를 들어서 addCount()를 호출할 때도 새로운 ProtytypeBean을 생성하고 그곳에 요청하게 됩니다. prototype을 이런 방식으로는 잘 사용하지 않기 때문에 크게 고민하지 않으셔도 될 것 같아요.
감사합니다.
아하
원래 교안에서는 PrototypeBean prototypeBean = prototypeBeanProvider.getObject();
이렇게 한번 변수로 받은 다음에 addCount, getCount를 호출하였기 때문에 의도대로 동작했고, 제 코드에서는 그렇지 않았기 때문에 메서드마다 매번 새로운 빈이 생성되어버려서 count가 0이었군요!!!
prototype을 이런 방식으로는 잘 사용하지 않는 다는 것이 어떤 말씀이신지 쪼금 알 것 같습니다
이해했습니다 정말 감사드립니다!!
0
안녕하세요, 인프런 AI 인턴입니다.
ideal0427님의 질문에 관해서는 이전에 비슷한 질문이 있었습니다. 프로토타입 스코프에 프록시를 적용하는 과정에서 발생한 문제를 해결하는 데 도움이 될 수 있는 관련 질문과 답변을 찾았습니다.
질문하신 내용과 유사한 문제를 해결한 답변이므로, 연결된 설명을 참고하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
보내주신 링크를 저도 확인했었는데, 제가 제대로 이해한 건진 모르겠지만 질문의 요지가 저랑은 달랐다고 생각했습니다
제 생각에 링크의 요지는 객체가 호출될 때 마다 새로운 인스턴스를 반환하는 이유가 질문자의 생각과 일치하는지 였고 반면에
제가 궁금했던 점은 프록시 객체를 사용했는데, 로그에 CGLIB라는 라이브러리로 상속 받은 가짜 프록시 객체라고 나오지 않았다는점과 addCount메서드가 제대로 동작하지 않는다는 점이었습니다
안녕하세요. 답변 해주신 것을 너무 늦게 확인해서 이제야 다시 질문드립니다ㅜ 죄송합니다
문제 영역을 실행할 수 있는 방법
test디렉토리의 hello.core.scope 의 SingletonWithPrototypeTest1 클래스 실행
2. 문제가 어떻게 나타나는지에 대한 상세한 설명 (오류 화면, 오류 로그 포함)
강의예시에 리퀘스트 스코프로 선언된 빈을 프록시 객체를 통해서 객체 조회를 지연처리 했던 것 처럼 프로토타입 스코프로 선언했던 빈 예시에서도 Provider을 이용한 DL대신 프록시 객체를 통해서 객체 조회 지연처리를 해보고자 하였습니다
제가 질문 했었 던 것은 두가지였습니다
프록시 객체를 사용했는데, 로그에 CGLIB라는 라이브러리로 상속 받은 가짜 프록시 객체라고 나오지 않았다는점
위와 같이 질문 했었는데 다시 확인해본 결과 프록시 객체를 사용한 시점 이후에 객체 주소값을 찍었어서 로그에 CGLIB 라는 표시가 안 나왔었습니다.
프록시 객체 사용 전에 객체 주소값을 찍으면 정상적으로 CGLIB라는 표시가 나왔습니다. 다만 CGLIB$ 이후에 주소값 형태가 아닌 0 이라고 나오는 것이 약간 의문이긴 합니다.
addCount메서드가 제대로 동작하지 않고, 로그 출력시 0으로 나옴
이점은 여전히 전혀 모르겠습니다... 프록시 객체와 Provider 가 지연처리를 해주는 점은 같지만 다른 방식으로 동작하기 때문일까요
해당 부분 코드와 로그 내용입니다
바쁘신 와중에도 신경 써주셔서 감사드립니다!!!