java动态代理

来源:互联网 发布:淘宝网衣服货到付款 编辑:程序博客网 时间:2024/06/05 19:55
package reflectTest;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class HelloServiceProxy implements InvocationHandler{    /**     * 真实对象     */    private Object target;    /**     * 绑定委托对象并返回一个代理类     */    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[] arg2)            throws Throwable {          System.out.println("jdk动态代理");          Object result = null;          //反射方法前调用          System.out.println("反射方法前");          //执行方法,执行真正的方法,即HelloServiceImpl中的sayHello方法          result = method.invoke(target, arg2);          //反射方法后调用          System.out.println("反射方法后");          return result;    }}
package reflectTest;public interface HelloService {    public void sayHello(String name);}
package reflectTest;public class HelloServiceImpl implements HelloService {    @Override    public void sayHello(String name) {        System.out.println("hello"+name);    }}
package reflectTest;public class HelloServiceMain {    public static void main(String[] args){        HelloServiceProxy helloHandler = new HelloServiceProxy();        HelloService proxy = (HelloService)helloHandler.bind(new HelloServiceImpl());        proxy.sayHello("nicole");    }}
0 0