java动态代理

来源:互联网 发布:java官网下载jdk7 编辑:程序博客网 时间:2024/06/07 00:55

package com.henry.reflection.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;interface Dog{void info();void run();}class GunDog implements Dog{@Overridepublic void info() {System.out.println("I'm a GunDog.");}@Overridepublic void run() {System.out.println("I'm running fastly.");}}class DogUtil{static void atBefore(){System.out.println("before...");}static void atAfter(){System.out.println("after...");}}class DogInvocationHandler implements InvocationHandler{//需要代理的目标对象private Object target;//设置代理对象public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//在代理对象的执行方法前插入代码DogUtil.atBefore();//调用代理对象的方法Object result=method.invoke(target, args);//在代理对象的执行方法后插入代码DogUtil.atAfter();return result;}}class ProxyFactory{/** * 生成动态代理的对象 * @param target 被代理的对象 * @return 返回动态代理对象 */public static Object getProxy(Object target){DogInvocationHandler handler=new DogInvocationHandler();handler.setTarget(target);//返回动态代理的对象return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);}}public class ProxyTest3 {public static void main(String[] args) {Dog dog=(Dog) ProxyFactory.getProxy(new GunDog());dog.info();dog.run();}}