Java代理系列-動態代理

動態代理能夠作什麼?好比說spring的AOP,它就是以動態代理爲基礎實現的,AOP攔截須要的請求,而後經過代理把請求的結果返回到AOP代理類中,在代理類裏就能夠作不少本身想要作的事情,好比日誌記錄,請求參數記錄等
java

首先動態代理須要三個實現類,一個測試類spring

接口HelloInterface
ide

接口實現類HelloInterfaceImpl測試

動態代理類HelloDynamicProxythis

測試類HelloTestspa

代碼具體實現代理

  • HelloInterface日誌

/**
 * Created by liuhj on 2015/12/28.
 */
public interface HelloInterface {
    public void say();
}

HelloInterfaceImplcode

/**
 * Created by liuhj on 2015/12/28.
 */
public class HelloInterfaceImpl implements HelloInterface {
    @Override
    public void say() {
        System.out.println("Hello");
    }
}

HelloDynamicProxyorm

要實現InvocationHandler接口

import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.Proxy; 

public class HelloDynamicProxy implements InvocationHandler{
	 private Object target;  
    /** 
     * @param target 
     * @return 
     */  
    public Object bind(Object target) {  
        this.target = target;  
        
        return Proxy.newProxyInstance(target.getClass().getClassLoader(),  
                target.getClass().getInterfaces(), this);    
    }  
  
    @Override  
    /** 
     *  
     */  
    public Object invoke(Object proxy, Method method, Object[] args)  
            throws Throwable {  
        Object result=null;  
        System.out.println("BEGIN");  
        
        result=method.invoke(target, args);  
        System.out.println("END");  
        return result;  
    }
}

HelloTest

 
public class TestProxy {  
  
    public static void main(String[] args) {  
        HelloDynamicProxy proxy = new HelloDynamicProxy();  
        HelloInterface helloProxy = (HelloInterface) proxy.bind(new HelloInterfaceImpl());  
        helloProxy.say();  
    }  
  
}

輸出結果

BEGIN
Hello
END

到此結束了

動態代理和靜態代理的區別就是代理中,靜態代理是以組合的方式注入到代理類,動態代理則是以反射機制注入到代理類。

才疏學淺,若有錯誤敬請指出,謝謝。

相關文章
相關標籤/搜索