spring中cglib代理的简单实现

其实跟前一篇中的动态代理很相似,动态代理是实现同一个接口,而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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容