java的代理模式实例

来源:互联网 发布:整套python教学视频 编辑:程序博客网 时间:2024/06/06 17:37

接口文件Hello.java

package com.company.staticProxy;/** * Created by ken on 2016/7/25. */public interface Hello {    void say(String str);}

实现文件HelloImpl.java

package com.company.staticProxy;/** * Created by ken on 2016/7/25. */public class HelloImpl implements Hello {    public String name = "奥巴马";    public String name2 = "小奥巴马";    @Override    public void say(String str) {        //System.out.println("之前");        System.out.println("hello " + str);        //System.out.println("之后");    }}

动态代理文件DynamicProxy.java

package com.company.dynamicProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * Created by ken on 2016/7/25. */public class DynamicProxy implements InvocationHandler {//  定义代理对象    public Object target;    //  注入代理对象    public DynamicProxy(Object object) {        this.target = object;    }    /**     *      * @param proxy 被代理对象     * @param method 代理对象的方法(核心业务)     * @param args 调用代理方法所需参数     * @return 代理对象     * @throws Throwable     */    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        //before        before();        //核心业务        Object obj = method.invoke(target, args);        //after        after();        return obj;    }    //before    public void before(){        System.out.println("this is before");    }    //after    public void after(){        System.out.println("this is after");    }}


主文件MainTest.java

package com.company.dynamicProxy;import com.company.staticProxy.Hello;import com.company.staticProxy.HelloImpl;import java.lang.reflect.Proxy;/** * Created by ken on 2016/7/25. */public class MainTest {    public static void main(String[] args) {        //被代理对象        HelloImpl hello = new HelloImpl();        //创建动态代理对象        DynamicProxy proxy = new DynamicProxy(hello);        // 获取被代理对象的代理        Hello result = (Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(),proxy);        result.say("思路网络科技");    }        }







0 0