1 /** 2 * Cglib 动态代理 3 * 1.引入cglib-nodep-2.2.jar 依赖 4 * 2.实现MethodInterceptor 接口 5 * 3.创建一个代理对象 6 * 4.完成 intercept方法 7 */ 8 public class CgilbProxy implements MethodInterceptor { 9 /** 10 * 返回一个代理对象 11 * @param classes 12 * @return 13 */ 14 public Object getInstance(Class<?> classes){ 15 // 通过Enhancer创建一个代理类 16 Enhancer enhancer = new Enhancer(); 17 enhancer.setSuperclass(classes); 18 enhancer.setCallback(this); 19 20 //创建一个代理对象 21 return enhancer.create(); 22 } 23 /** 24 * 返回一个代理对象 25 * @param o 26 * @param method 27 * @param objects 28 * @param methodProxy 29 * @return 30 * @throws Throwable 31 */ 32 @Override 33 public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { 34 //proxy 是上个方法的代理对象 35 //method 调用的方法 36 //args 返回参数 37 System.out.println("代理的方法"+ method.getName()); 38 Object result = methodProxy.invokeSuper(o, objects); 39 40 return result; 41 } 42 }
//卖车 public interface sellCar { void sellcar(); }
//经理卖车 public class Manage implements sellCar { @Override public void sellcar() { System.out.println("卖车"); } }
public class Client {测试// 创建代理对象 代理接口 public static void main(String[] args) { CgilbProxy cgilbProxy = new CgilbProxy(); sellCar instance = (sellCar) cgilbProxy.getInstance(Manage.class); instance.sellcar(); } }
上面是通过接口
-----------------
下面的例子是通过类
public class Manage { public void sellcar() { System.out.println("卖车"); } }
public static void main(String[] args) {测试 CgilbProxy cgilbProxy = new CgilbProxy(); Manage manage= (Manage) cgilbProxy.getInstance(Manage.class); manage.sellcar(); }