동적 프록시의 래핑을 취소하여 원본 개체를 검색하는 최선의 방법은 무엇입니까? 동적 프록시를 사용하여 생성되었습니다 java.lang.reflect.Proxy.newProxyInstance()
원본 프록시를 동적 프록시에서 푸는 방법
감사합니다.
동적 프록시의 래핑을 취소하여 원본 개체를 검색하는 최선의 방법은 무엇입니까? 동적 프록시를 사용하여 생성되었습니다 java.lang.reflect.Proxy.newProxyInstance()
원본 프록시를 동적 프록시에서 푸는 방법
감사합니다.
각 프록시에는 InvocationHandler
이 연결되어 있습니다. InvocationHandler
만 인 경우 어떤 개체 ()가 프록시의 기초가되는지 알 수 있습니다. 프록시 생성을 제어하면 추가 기능 (예 : 기본 객체를 공개 할 수 있음)을 갖게 될 InvocationHandler
을 제공 할 수 있습니다. 그렇지 않으면, 다음과 같은 두려움이 있습니다. 운없는.
Proxy.getInvocationHandler (proxy) 메소드를 사용하여 원래 InvocationHandler를 얻을 수 있습니다.
그건 감싸 인 객체가 아닙니다. –
Proxy.getInvocationHandler (proxy)는 핸들러를 반환하지만 문제는 핸들러에서 원래 객체를 추출하는 것입니다. 처리기가 익명 클래스 인 경우 원본 개체를 추출하는 유일한 방법은 reflection을 사용하고 val $ something이라는 필드에서 원본을 추출하는 것입니다.이 메서드는 매우 못생긴 메서드입니다.
((YourHandler)Proxy.getInvocationHandler(proxy)).getOriginalObject()
당신이 그것을 만든 방법에 따라 달라집니다 더 좋은 방법은 당신이하는 게터와 익명이 아닌 핸들러 클래스를 만드는 것입니다. 어떤 도서관? JDK 프록시? 또는 CGLIB/Javassist? – Bozho
@ 보 소 : 더 정확한 질문을 업데이트했습니다. – MRalwasser
원래 개체가 있다고 가정합니다. 'InvocationHandler'가'newProxyInstance()'로 보내지는 것은 무엇입니까? –