java设计模式--代理模式(三)

来源:互联网 发布:用ps淘宝详情页怎么做 编辑:程序博客网 时间:2021/04/12 15:16

上一节讲了jdk动态代理,这节讲引入第三方jar包的动态代理


//CglibProxy.javaimport java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CglibProxy implements MethodInterceptor {private Enhancer enhancer = new Enhancer();public Object getProxy(Class clazz){//设置创建子类的类enhancer.setSuperclass(clazz);enhancer.setCallback(this);return enhancer.create();}/** * 拦截所有目标类方法的调用 * obj  目标类的实例 * m   目标方法的反射对象 * args  方法的参数 * proxy代理类的实例 */@Overridepublic Object intercept(Object obj, Method m, Object[] args,MethodProxy proxy) throws Throwable {System.out.println("日志开始...");//代理类调用父类的方法proxy.invokeSuper(obj, args);System.out.println("日志结束...");return null;}}
//Train.javapublic class Train {public void move(){System.out.println("火车行驶中...");}}
//测试public class Client {public static void main(String[] args) {CglibProxy proxy = new CglibProxy();Train t = (Train)proxy.getProxy(Train.class);t.move();}}
结果:

汽车开始行驶....
汽车行驶中....
汽车结束行驶....  汽车行驶时间:274毫秒!