優先是jdk動態代理,其次是cglib動態代理,網上搜一下兩種動態代理的代碼示例。
其實就是動態的創建一個代理類出來,創建這個代理類的實例對象,在這個里面引用你真正自己寫的類,所有的方法的調用,都是先走代理類的對象,他負責做一些代碼上的增強,再去調用你寫的那個類。
spring里使用aop,比如說你對一批類和他們的方法做了一個切面,定義好了要在這些類的方法里增強的代碼,spring必然要對那些類生成動態代理,在動態代理中去執行你定義的一些增強代碼。
如果你的類是實現了某個接口的,spring aop會使用jdk動態代理,生成一個跟你實現同樣接口的一個代理類,構造一個實例對象出來,jdk動態代理,他其實是在你的類有接口的時候,就會來使用。
很多時候我們可能某個類是沒有實現接口的,spring aop會改用cglib來生成動態代理,他是生成你的類的一個子類,他可以動態生成字節碼,覆蓋你的一些方法,在方法里加入增強的代碼。