JDK 동적 에이전트 구현

2332 단어 디자인 모드
장면  호출 하기 전에 로 그 를 쓰 고, 호출 한 후에 로 그 를 쓰 는 방법 이 있 습 니 다.
 
업무 방법
public class UserCode {

    public void save(){
        System.out.println("        ");
    }

a. 우선 동적 대 리 는 인 터 페 이 스 를 실현 해 야 합 니 다.
public interface UserInterface {

    public void save();
}

b. 우리 의 업무 류 가 이 인 터 페 이 스 를 실현 하도록 합 니 다.
public class UserCode implements  UserInterface{

    @Override
    public void save(){
        System.out.println("        ");
    }

c. 프 록 시 클래스 정의  또한 이 종 류 는 Invocation Handler 인 터 페 이 스 를 실현 하고 대리 방법 을 실현 해 야 한다.
 
public class LogProxy implements InvocationHandler{

    //     
    private UserInterface target;

    public LogProxy(UserInterface target){
        this.target =target;
    }

    /**
     *
     * @param proxy
     * @param method      
     * @param args            
     * @return           
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        System.out.println("           ");
        //      
        Object obj = method.invoke(target,args);
        
        System.out.println("           ");

         //                null                 null
        return obj;
    }
}

d. 다음은 저희 main 방법 으로 대리 가 성공 할 수 있 는 지 테스트 하 겠 습 니 다.
public class ProxyClient {

    public static void main(String[] args) {

        //          
        UserInterface ui = new UserCode();

        //         
        LogProxy lp = new LogProxy(ui);

        //           
        Object tarProxy = Proxy.newProxyInstance(ProxyClient.class.getClassLoader(), UserCode.class.getInterfaces(), lp);

        //  
        UserInterface uiProxy = (UserInterface) tarProxy;

        //           
        System.out.println(uiProxy.getClass().getName());

        //        
        String retuenStr = uiProxy.save("gege");

        //     
        //    InvocationHandler   invoke       null      null

        System.out.println(retuenStr);
    }


}

콘 솔 인쇄 결과
com.sun.proxy.$Proxy0    방법 호출 전에 로그 비 즈 니스 논리 저장 방법: gege 방법 호출 후 로그 name: gege 를 작성 합 니 다.
 
프 록 시 대상 을 만 드 는 코드 를 프 록 시 클래스 에 쓸 수 있 습 니 다. 프 록 시 를 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기