IT-迁哥
发布于 2024-01-25 / 120 阅读
32
0

cglib动态代理

记一次cglib的通用动态代理,cglib的代理功能十分强大,通过动态字节码技术,可以单独代理类,不需要实现接口也行,还可以动态生成接口的实现类。

注(cglib的代理会代理父类的方法)

public class CglibCommonProxy {
    public <T> Object getProxy(Class<T> target) {
        return Enhancer.create(target, new MethodInterceptor() {
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                System.out.println("cglib-start");
                Object res = methodProxy.invokeSuper(o, objects);
                System.out.println("cglib-end" + res);
                return res;
            }
        });
    }

    public static void main(String[] args) {

        Object proxy = (HttpRequestImpl)new CglibCommonProxy().getProxy(HttpRequestImpl.class);

        System.out.println(proxy);
        HttpRequest httpRequest = (HttpRequestImpl) proxy;
        httpRequest.test();
    }
}


评论