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的方法都帶有回調鉤子。
實戰操作如下:
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(); ????} }
以上就是小編今天的分享了,希望可以幫助到大家。