세 가지의 JDK 동적 프록시와 프록시 모드 CGLIB의 강점과 약점 그리고 왜를 기본 JDK 동적 프록시 자바 소스 코드 JDK 동적 프록시 인터페이스

이전 두 기사에서

세 개의 자바 프록시 모드

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 (),이..) 
    } 

}

 

추천

출처www.cnblogs.com/silyvin/p/12032768.html