动态代理代码实现实例

来源:互联网 发布:执业药师网络报名机构 编辑:程序博客网 时间:2024/06/16 08:41

实现InvokeHandle接口的类:

package com.zjlolife.dymanic_proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class InvoHandle implements InvocationHandler {private Object target;    public InvoHandle(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("inhandle中的target"+target);Object ret = null;System.out.println("正在执行的方法"+method.getName()+"========");if(args!=null) {for(Object arg:args) {System.out.println("传入的参数"+arg);}}else {System.out.println("没有传入参数");}ret = method.invoke(target, args);System.out.println(method.getName()+"方法执行完成=========");return ret;}}

生成动态代理对象的类:

package com.zjlolife.dymanic_proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class ProxyFactory {private InvocationHandler invohandle;private Object target; public ProxyFactory(Object target) {    this.target = target;    invohandle = new InvoHandle(this.target);        }     public Object getProxy(){     return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), invohandle);     }        }

一个接口类:

package com.zjlolife.dymanic_proxy;public interface Animal {public void walk();public void sleep();public String say();}

实现该接口的类:

package com.zjlolife.dymanic_proxy;public class Bird implements Animal {@Overridepublic void walk() {// TODO Auto-generated method stub}@Overridepublic void sleep() {// TODO Auto-generated method stub}@Overridepublic String say() {// TODO Auto-generated method stubreturn "bird叫了";}}

测试类:

package com.zjlolife.dymanic_proxy;public class Client {public static void main(String [] args) {Animal bird = new Bird();Animal animal = (Animal)new ProxyFactory(bird).getProxy();animal.say();}}


原创粉丝点击