文章标题

来源:互联网 发布:大数据软件 编辑:程序博客网 时间:2024/05/26 12:55

java动态代理

基本概念待续。。。。先看实现代码

package com.devil.practice.proxy;/** * 需要被代理的接口 *  * @author devil * */public interface ObjectInterface {    /**     * 第一个接口     *      * @param index     *            参数     * @return 返回值     */    public String getName(int index);}
package com.devil.practice.proxy;/** * 被代理对象的具体实现 *  * @author devil * */public class ObjectImpl implements ObjectInterface {    @Override    public String getName(int index) {        System.out.println("getName:" + index);        String name = null;        switch (index) {        case 1:            name = "index1";            break;        case 2:            name = "index2";            break;        case 3:            name = "index3";            break;        default:            name = "indexnull";            break;        }        return name;    }}
package com.devil.practice.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 代理类的实现 *  * @author devil * */public class ProxyHander implements InvocationHandler {    private Object proxyObject;    public ProxyHander(Object proxyObject) {        super();        this.proxyObject = proxyObject;    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        // 调用之前可以做其他的一些处理,比如对参数的重新封装        System.out.println("调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。");        // -----------------------------------------------        Object result = method.invoke(proxyObject, args);        // -----------------------------------------------        // 调用结束后做一些其他的处理。比如对返回结果的处理        System.out.println("调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。");        // 返回处理的结果        return result;    }}
package com.devil.practice.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;/** * 代理生成工厂 *  * @author devil * */public abstract class ProxyBuildFactory {    public static ObjectInterface buildObject(ObjectInterface temp) {        // 处理器生成        InvocationHandler handler = new ProxyHander(temp);        // 获取代理对象的        ObjectInterface object = (ObjectInterface) Proxy.newProxyInstance(temp.getClass().getClassLoader(), temp                .getClass().getInterfaces(), handler);        return object;    }}
package com.devil.practice.proxy;/** * 测试代码 *  * @author devil * */public class ProxyMain {    public static void main(String[] args) {        System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。");        ObjectInterface inter = new ObjectImpl();        System.out.println(inter.getName(2));        System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。");        System.out.println("----------------------------------------------------");        System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。");        ObjectInterface inter2 = ProxyBuildFactory.buildObject(new ObjectImpl());        System.out.println(inter2.getName(2));        System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。");    }}

输出:

。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。getName:2index2。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。----------------------------------------------------。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。getName:2调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。index2。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。
0 0
原创粉丝点击