- 定义拦截回调, 实现
MethodInterceptor
接口
package proxy;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/** * @author Mr Morning * @date 2019/4/30 08:54 */public class CglibProxy implements MethodInterceptor { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("before invoke"); methodProxy.invokeSuper(obj, args); System.out.println("after invoke"); return obj; }}复制代码
package proxy;/** * @author Mr Morning * @date 2019/4/30 08:56 */public class Run { public void run(){ System.out.println("runing......"); }}复制代码
@Test public void testCglib(){ Enhancer enhancer = new Enhancer(); // 设置被代理类 enhancer.setSuperclass(Run.class); // 设置拦截回调 enhancer.setCallback(new CglibProxy()); // 创建代理类 Run o = (Run) enhancer.create(); // 判断是否为代理类 boolean is = o.getClass().getName().contains("$$EnhancerByCGLIB$$"); System.out.println(is); o.run(); System.out.println("end"); }复制代码