網站首頁 學習教育 IT科技 金融知識 旅遊規劃 生活小知識 家鄉美食 養生小知識 健身運動 美容百科 遊戲知識 綜合知識
當前位置:趣知科普吧 > IT科技 > 

cglib|java

欄目: IT科技 / 發佈於: / 人氣:2.61W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java cglib是什麼,讓我們一起了解一下?

CGLIB(Code Generator Library)是一個強大的、高性能的代碼生成庫,被廣泛應用於AOP框架(Spring、dynaop)中,用以提供方法攔截操作。

為什麼要使用CGLIB?

因為CGLIB代理主要通過對字節碼的操作,為對象引入間接級別,以控制對象的訪問。我們知道Java中有一個動態代理也是做這個事情的,那我們為什麼不直接使用Java動態代理,而要使用CGLIB呢?答案是CGLIB相比於JDK動態代理更加強大,JDK動態代理雖然簡單易用,但是其有一個致命缺陷是,只能對接口進行代理。如果要代理的類為一個普通類、沒有接口,那麼Java動態代理就沒法使用了。

java cglib

java如何實現代理cglib?

Enhancer是cglib中使用頻率很高的一個類,它是一個字節碼增強器,可以用來為無接口的類創建代理。它的功能與java自帶的Proxy類挺相似的。它會根據某個給定的類創建子類,並且所有非final的方法都帶有回調鈎子。

實戰操作如下:

<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version></dependency>

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();    }}

Tags:cglib java