动态代理

来源:互联网 发布:高铁买票软件 编辑:程序博客网 时间:2024/05/18 01:46

动态代理两个要素:

1.代理的接口

2.处理接口方法调用的java.lang.reflect.InvocationHandler

/** * 要代理的接口 * @author Administrator * */public interface ProxyInterface {String getName(String name);}

调用被代理的接口中的方法时invoke方法被调用

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 处理接口方法调用 * @author Administrator * */public class MethodHanlder implements InvocationHandler {private Object target;public void setTarget(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("----------method start--------");Object result=method.invoke(target, args);System.out.println("----------method end----------");return result;}}

被代理对象

public class ProxyTarget implements ProxyInterface{@Overridepublic String getName(String name) {return name;}}

测试类

import java.lang.reflect.Proxy;public class Test {public static void main(String[] args) {//被代理对象ProxyInterface target=new ProxyTarget();MethodHanlder handler=new MethodHanlder();handler.setTarget(target);//创建代理ProxyInterface object=(ProxyInterface) Proxy.newProxyInstance(ProxyTarget.class.getClassLoader(),target.getClass().getInterfaces(), handler);String name=object.getName("张三");System.out.println(name);//结果/**----------method start------------------method end----------张三**/}}


0 0
原创粉丝点击