JPA 쓸 때 지연 로딩하면
연관 엔터티는 프록시로 처리해서 주잖아
이때 프록시는 CGLIB를 통해 타겟 엔터티 클래스를 상속해서
만들어지잖음?
그리고 그 프록시 객체를 통해 먼가 하려고하면
그때 엔터티 객체가 생성되고 프록시가 내부적으로 그 엔터티 객체에 접근해서 대신 처리해주는걸로 알고 있거든.
근데 그러면 이 상속받은 프록시 객체의 부모, 즉 프록시가 생성될때 함께 생성된 super랑 메서드 사용 시 호출되는 엔터티랑 총 2개가 메모리에 별개로 존재하는거지?
프록시 객체의 super()는 생성할때만 쓰고 냅두고
실제 조회 시 쓰일 target 엔터티는 조회 시점에 새로 만들어서
프록시 내부의 target 변수에 연결되는거 맞어?
연관 엔터티는 프록시로 처리해서 주잖아
이때 프록시는 CGLIB를 통해 타겟 엔터티 클래스를 상속해서
만들어지잖음?
그리고 그 프록시 객체를 통해 먼가 하려고하면
그때 엔터티 객체가 생성되고 프록시가 내부적으로 그 엔터티 객체에 접근해서 대신 처리해주는걸로 알고 있거든.
근데 그러면 이 상속받은 프록시 객체의 부모, 즉 프록시가 생성될때 함께 생성된 super랑 메서드 사용 시 호출되는 엔터티랑 총 2개가 메모리에 별개로 존재하는거지?
프록시 객체의 super()는 생성할때만 쓰고 냅두고
실제 조회 시 쓰일 target 엔터티는 조회 시점에 새로 만들어서
프록시 내부의 target 변수에 연결되는거 맞어?
스프링이 생성 2번 안되게 무슨 라이브러리 써서 막았다고 들었는데
1차 캐시 생성을 말함? 아니면 빈 싱글턴 말함?
어떻게 구현되있는지는 모르지만 프록시 객체 안에 EntityClass original = null; 해두고 필요해지면 그때 조회하고 original에 넣어두면 되는거 아님?
프록시 객체가 엔티티 상속해서 생성되고 원본 엔티티 객체는 나중에 생성되서 프록시가 들고있는거
그치 그건 맞는데 내 말은 자식 객체가 생성되면 내부적으로 부모객체도 생성되잖아. 그래서 그 내부의 객체랑 나중에 호출되는 원본 객체는 별개의 인스턴스인가 했음. 자기 부모에 값을 리플렉션으로 주입하거나 하진 않는건가? 하는 의문이 들었는데 역시 그냥 아예 새로 만들어서 연결하나보네.