其实跟前一篇中的动态代理很相似,动态代理是实现同一个接口,而cglib代理是直接继承于被代理对象,是被代理对象的子类
代码如下:
Cat是被代理对象,内部又一个play方法
public class CglibProxy implements MethodInterceptor {
public Cat getCatInterface(){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Cat.class);
enhancer.setCallback(this);
Cat cat = (Cat) enhancer.create();
return cat;
}
public Object intercept(Object objProxy, Method method, Object[] params, MethodProxy methodProxy) throws Throwable {
System.out.println("before");
//注意这里是需要调用父类的方法而不是自身的方法
methodProxy.invokeSuper(objProxy, params);
System.out.println("after");
return null;
}
}
使用的时候
Cat cat = new CglibProxy().getCatInterface();
cat.play();