이전 두 기사에서
세 개의 자바 프록시 모드
JDK 동적 프록시와 CGLIB의 강점과 약점 그리고 왜 JDK 동적 프록시 인터페이스
화제의 JDK 동적 프록시
기본 소스 코드를 소스 레벨보기에서이 문서 플러스
System.setProperty를 ( "sun.misc.ProxyGenerator.saveGeneratedFiles", "진정한");
에서 (아직) 에센스 주석 , 우리는 또한 그것을해야, 프록시 클래스의 나가
Proxy0.class
공공 최종 클래스 $ Proxy0 프록시 구현 IUserDao {확장 개인 정적 방법 (M1)를; 개인 정적 방법 m3; 개인 정적 메소드 m2; 개인 정적 방법 M0; 공공 $ Proxy0 (InvocationHandler입니다 VAR1)이 발생 { 슈퍼 (VAR1); } 공공 최종 부울 등호 (개체 VAR1)이 발생 { 시도 { 반환 ((부울) super.h.invoke (이, M1, 새로운 객체 [] {var1에})) booleanValue ().; } 캐치 (RuntimeException의 | 오류 VAR3) { 던져 VAR3; } 캐치 (Throwable를 var4) { 새로 UndeclaredThrowableException (var4)를 던져; } } 저장 공공 최종 무효가 () {던졌습니다 시도 { super.h.invoke (이, m3, (객체 [])는 null); } 캐치 (RuntimeException의 | 오류 VAR2) { 던져 VAR2; } 캐치 (Throwable를 VAR3) { 새로 UndeclaredThrowableException (VAR3)를 던져; } }
시간 :
공용 클래스 ProxyFactory에는 구현의 InvocationHandler입니다 { //维护一个目标对象 개인 개체 대상; 또한 ProxyFactory 공개 (개체 대상) { this.target = 타겟; } @Override (개체 프록시 방법에있어서, 오브젝트 [] 인수)를 호출하여 공용 개체의 Throwable {발생 개체에 ReturnValue = method.invoke (목표를 인수); 에 ReturnValue를 반환; } //给目标对象生成代理对象 공공 오브젝트 getProxyInstance () { 반환 Proxy.newProxyInstance (target.getClass () getClassLoader를 (), target.getClass ()의 getInterfaces (),이..) } }