묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스코프 관련 질문이 있습니다.
스코프 관련 궁금한 점이 있습니다. MemberListController MemberSaveController같은 경우 내부에 process 함수를 보유하고 있고 public String process(Map<String, String> paramMap, Map<String, Object> model) 인자로 전달받은 model 객에체 model.put("member", member); 같이 주입을 해 주는데 함수 밖에서도 사용 할 수 있는거 같습니다. mv.setModel(model); handle 함수에서 에서 만든 model 객체와 process 함수에서 쓰인 model 객체는 다른 스코프의 다른 객체가 아닌가요? 어떻게 사용이 될 수 있는 건가요? 인자로 전달 했고, 전달받은 객체를 변화 시켯지만 함수가 종료 되었는데 그 객체의 스코프가 계속 유지가 되는게 이해가 안되어 질문 드립니다. 물론 아래에 이와같은 질문이 있지만 더욱 더 자세한 설명이 필요해서 질문 드립니다. -- 혹시 Call By Reference 때문인가요? 구글링을 하다보니 저게 의심이 되네요
-
해결됨스프링 프레임워크 핵심 기술
"Prototype/프록시"로 설정했는데 동일한 객체로 나옵니다
@Getter @Component @Scope(scopeName = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode = ScopedProxyMode.TARGET_CLASS) public class Prototype { private final UUID uuid = UUID.randomUUID(); } @Getter @Component @RequiredArgsConstructor public class Singleton { private final Prototype prototype; public void print() { System.out.println(prototype.getUuid()); System.out.println(prototype.getUuid()); System.out.println(prototype.getUuid()); } } Singleton singleton = context.getBean(Singleton.class); singleton.print(); Prototype p1 = singleton.getPrototype(); Prototype p2 = singleton.getPrototype(); System.out.println(p1); System.out.println(p2); System.out.println(p1.getUuid()); System.out.println(p2.getUuid()); System.out.println(p1 == p2); System.out.println(p1.equals(p2)); System.out.println(new Prototype().equals(new Prototype())); Singleton bean 안에 class를 target으로 하는 proxy로 prototype의 bean을 필드로 정의했습니다. 근데 singleton 객체에서 prototype 필드를 print하면 메모리 주소는 다르게 나오는데 ==, equals 등으로 비교하면 true가 나오는 기이한 현상을 겪고 있습니다. 제 자바 근간이 흔들리고 있어요; 왜 그런 걸까요..?