動態代理實現過程

  1. 定義一個接口】

    package com.jgc.proxy;

    import java.util.List;

    public interface jgc {
        public List<Object> dojgc(Object object);
    }

  2. 繼承InvocationHandler實現invoke方法

package com.jgc.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class proxyjgc implements InvocationHandler {

    @Override
    public Object invoke(Object proxy, Method method, Object[] arg2)
            throws Throwable {
        System.out.println("接口全名:"+proxy.getClass().getName()+">>>>>>>>>>>>>"+"接口方法名"+method.getName());
        List<Object> list=new ArrayList<Object>();
        list.add("哈哈,你已經實現了動態代理");
        list.add("恭喜哦。請吃飯");
        return list;
    }

}

3.創建一個類用getmapper方法創建代理實例並強轉

package com.jgc.proxy;

import java.lang.reflect.Proxy;

import com.imooc.test.MapperProxy;

public class sqlsession {
    @SuppressWarnings("unchecked")
    public <T> T getMapper(Class<T> type){
        return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, new proxyjgc());
                
        }
    }

4.用main跑通整個過程

package com.jgc.proxy;

import java.util.List;

public class jgcMain {

    public static void main(String[] args) {
        sqlsession sqlsession=new sqlsession();
        jgc jc=sqlsession.getMapper(jgc.class);
        List<Object> list=jc.dojgc(new Object());
        for(Object l:list){
            System.out.println(l);
        }
        System.out.println(list.size());
    }

}

5.運行結果

接口全名:com.sun.proxy.$Proxy0>>>>>>>>>>>>>接口方法名dojgc
哈哈,你已經實現了動態代理
恭喜哦。請吃飯
2


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章