## 一,應用范圍
1,如果目標對象實現了接口,在默認情況下會采用JDK的動態代理實現AOP
2,如果目標對象實現了接口,也可以強制使用CGLIB生成代理實現AOP
3,如果目標對象沒有實現接口,必須引入CGLIB,Spring會在JDK的動態代理和CGLIB代理之間進行切換。
## 二,強制使用CGLIB代理
###1,引入CGLIB的Jar:

### 2,Spring配置文件中加入強制使用CGLIB代理
~~~
<!-- 強制使用CGLIB代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
~~~
## 三,小結
1, JDK的動態代理只能對實現了接口的類進行代理:

如上圖,如果要為UserManagerImpl生成代理,這種關系下,可以使用JDK的動態代理,也可以強制使用CGLIB進行代理。
但是如果我去掉實現關系:

這時候就必須要使用CGLIB了。
另外,CGLIB在實現動態代理的時候,主要是為指定的類生成一個子類,例如,我要對上面的UserManagerImpl生成一個代理,會繼承這個類,但是這個時候,如果我們把UserManagerImpl定義為final的,就無法被繼承了,也就不能生成代理類了。所以,我們的Target object最好不要聲明為final的。
- 前言
- Spring簡化配置
- Spring中使用AspectJ實現AOP
- Spring中JDK的動態代理和CGLIB代理的區別
- Spring配置問題——元素 "context:component-scan" 的前綴 "context" 未綁定
- Hibernate中編程式事物的簡單使用
- 使用Spring為Hibernate配置聲明式事物
- Struts2+AJAX獲取json數據
- 中間件概述
- EJB(Enterprise Java Bean)概述
- JBoss 6.1安裝配置問題
- EJB對象的部署及客戶端調用簡單示例
- 有狀態的EJB對象和無狀態的EJB對象
- EJB遠程調用和本地調用
- MyBatis——入門select