JDK的動態代理基本實現

動態,指的是代理類實在程序運行時建立的,而不是在程序運行前手動編碼來定義代理類的。這些動態代理類是在運行時候根據咱們在JAVA代碼中的「指示」動態生成的。動態代理的使用方式呢,主要就是分爲兩種:一種是基於接口的代理;另外一種則是基於類的代理。java

基於接口的代理,就是jdk自帶的動態代理規則的實現方式,後者則是基於一些字節類加強的類代理,如cglib,javassist等。
jdk代理最主要的就是三個類:目標接口,目標類(實現了目標接口),擴展處理器InvocationHandler類。ide

1.建立被代理的接口和類測試

//目標接口
public interface HelloInterfece {
    public void sayHello();
}this

//目標類
public class HelloInterfeceImpl implements HelloInterfecr {
    @Override
    public void sayHello() {
        System.out.println("say..hello...");
    }
}編碼

//擴展處理器
2.建立代理類實現InvocationHandler 接口
public class HelloProxy implements InvocationHandler {
    private Object target;
    public HelloProxy(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("----代理前----");
        Object result=method.invoke(target,args);
        System.out.println("-----代理後----");
        return result;
    }
}.net

3.編寫測試類
public class HelloProxyTest {代理

    public static void main(String[] args) {
        //實例化被代理對象
        HelloInterfecr helloInterfece = new HelloInterfeceImpl();
        //實例化代理對象
        HelloProxy helloProxy = new HelloProxy(helloInterfece);
        //創建代理關係
        HelloInterfecr helloInterfeceImpl = (HelloInterfecr) Proxy.newProxyInstance(helloInterfece.getClass().getClassLoader(), helloInterfece.getClass().getInterfaces(), helloProxy);
        //調用方法
        helloInterfeceImpl.sayHello();
    }
}對象

相關文章
相關標籤/搜索