美文网首页
代理没有接口的类-CGLib

代理没有接口的类-CGLib

作者: Vekaco | 来源:发表于2018-09-18 21:13 被阅读0次

    当需要代理没有任何接口的类时,动态代理无法实现该功能。此时需要借助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方法,实质上可以将此理解为方法层面的拦截器。

    相关文章

      网友评论

          本文标题:代理没有接口的类-CGLib

          本文链接:https://www.haomeiwen.com/subject/ozhvnftx.html