package com.jason.dynamicProxy; /** * @author jason * @Description:定义一个汽车接口,具有行为行驶 * @date 2018/2/2 */ public interface Car { //具有行驶的方法,未提供实现 public void run() throws Exception; }
package com.jason.dynamicProxy; import java.util.Random; /** * @author jason * @Description:提供实现类实现汽车行驶的行为,不过这次试用动态代理来完成代理 * @date 2018/2/2 */ public class Baoma implements Car { //实现行驶的方法 @Override public void run() throws Exception{ //里面使用了使当前线程睡眠的方法,休眠若干秒 Thread.sleep(new Random().nextInt(1000)); System.out.println("奥迪汽车行驶结束..."); } }
package com.jason.dynamicProxy; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * @author jason * @Description:实现时间代理,不过这次使用的是cglib代理 * @date 2018/2/2 */ public class TimeProxy implements MethodInterceptor { //需要实现的接口 //在中间可有有自己具体的代码 @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { //记录开始时间 long start = System.currentTimeMillis(); Object invokeSuper = methodProxy.invokeSuper(o, objects); //记录结束时间 long end = System.currentTimeMillis(); //打印汽车行驶时间 System.out.println("汽车行驶的时间"+(end-start)); return invokeSuper; } }
package com.jason.dynamicProxy; import net.sf.cglib.proxy.Enhancer; import java.lang.reflect.Proxy; import java.sql.Time; /** * @author jason * @Description:测试动态代理类的方法 * @date 2018/2/2 */ public class Test { public static void main(String[] args) throws Exception{ //初始化代理类 TimeProxy timeProxy = new TimeProxy(); //初始化Enhancer类 Enhancer enhancer = new Enhancer(); //设置需要被代理类 enhancer.setSuperclass(Baoma.class); //设置代理类 enhancer.setCallback(timeProxy); //返回需要的对象 Car car = (Car) enhancer.create(); //通过调用实例对象方法来执行 car.run(); } }