代理没有接口的类-CGLib

2018-09-18  本文已影响0人  Vekaco

当需要代理没有任何接口的类时,动态代理无法实现该功能。此时需要借助CGLib来代理没有接口的类。

我们需要引入以下两个依赖包,cglibasm

public class CGLibProxy implements MethodInterceptor{

    public <T> T getProxy(Class<T> cls) {
        return (T) Enhancer.create(cls,this);
    }

    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        before();
        Object result = methodProxy.invokeSuper(o, objects);
        after();

        return result;
    }

    private void before() {
        System.out.println("before...");
    }

    private void after() {
        System.out.println("after...");
    }

    public static void main(String[] args) {
        CGLibProxy cgLibProxy = new CGLibProxy();
        Hello helloProxy = cgLibProxy.getProxy(HelloImpl.class);
        helloProxy.say("Jack");
    }
}

实现CGLib提供给我们的MethodInterceptor的intercept方法,实质上可以将此理解为方法层面的拦截器。

上一篇下一篇

猜你喜欢

热点阅读