java cglib

作者:原创时间:2022-03-25
文档

java cglib是什么,让我们一起了解一下?

CGLIB(Code Generator Library)是一个强大的、高性能的代码生成库,被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。

为什么要使用CGLIB?

因为CGLIB代理主要通过对字节码的操作,为对象引入间接级别,以控制对象的访问。我们知道Java中有一个动态代理也是做这个事情的,那我们为什么不直接使用Java动态代理,而要使用CGLIB呢?答案是CGLIB相比于JDK动态代理更加强大,JDK动态代理虽然简单易用,但是其有一个致命缺陷是,只能对接口进行代理。如果要代理的类为一个普通类、没有接口,那么Java动态代理就没法使用了。

java如何实现代理cglib?

Enhancer是cglib中使用频率很高的一个类,它是一个字节码增强器,可以用来为无接口的类创建代理。它的功能与java自带的Proxy类挺相似的。它会根据某个给定的类创建子类,并且所有非final的方法都带有回调钩子。

实战操作如下:

  1. 
    cglib
    cglib
    2.2.2
    
public class SampleClass {
    public void test(){
        System.out.println("hello world");
    }
 
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(SampleClass.class);
        enhancer.setCallback(new MethodInterceptor() {
            @Override
            public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                System.out.println("before method run...");
                Object result = proxy.invokeSuper(obj, args);
                System.out.println("after method run...");
                return result;
            }
        });
        SampleClass sample = (SampleClass) enhancer.create();
        sample.test();
    }
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
iPad怎么重启 java channel java charat java charsequence java charset java cipher java class java class.forname java classloader java clob java clone() java collect java collections java color java combobox java comet 山楂干泡水最佳搭配 java commandline java comparable接口 java compiler 平板如何录屏 java ceiling java callback java calendar获取当前时间 苹果13怎么开机 java calculate java byte取值范围 java bytebuffer java bundle java build.gradle java bufferedoutputstream java bufferedimage wps怎么求和 java break java blob java bit 如何清理win10电脑c盘 java binlog win10c盘满了怎么清理 java binder