文章部分內容整理自郭永鋒視頻教學內容!
目錄
9、Spring半自動代理(JDK動態代理、cglib 增強字節碼)
10、Spring全自動代理(JDK動態代理、cglib 增強字節碼)
1、IoC控制反轉的概念
Inverse of Control 反轉控制的概念,就是將原本在程序中手動創建對象的控制權,交由Spring框架管理,簡單說,就是創建對象控制權被反轉到了Spring框架。
2、DI依賴注入
Dependency Injection 依賴注入,在Spring框架負責創建Bean對象時,動態的將依賴對象注入到Bean組件。如下例子
在UserService中提供一個get/set的name方法,在beans.xml中通過property去注入。
|
|
3、加載Spring容器的三種方式
類路徑獲得配置文件(常用) |
|
文件系統路徑獲得配置文件 |
|
使用BeanFactory(過時) |
|
4、bean的作用域
類別 |
說明 |
singleton |
在Spring IoC容器中僅存在一個Bean實例,Bean以單例方式存在,默認值 |
prototype |
每次從容器中調用Bean時,都返回一個新的實例,即每次調用getBean()時 ,相當於執行new XxxBean() |
|
|
5、@Component註解
註解:就是一個類,使用@註解名稱,使用註解可以取代 xml配置文件。
@component註解可取代xml文件中bean的配置。
@component取代<bean class="">
@component("id")取代 <bean id="" class="">
@Repository(“名稱”) |
dao層 |
@Service(“名稱”) |
service層 |
@Controller(“名稱”) |
web層 |
@Autowired |
自動根據類型注入 |
@Qualifier(“名稱”) |
指定自動注入的id名稱 |
@Resource(name=“名稱”) |
等效前兩個註解 |
@ PostConstruct |
自定義初始化 |
@ PreDestroy |
自定義銷燬 |
舉例:
開啓註解 |
|
引用註解 |
|
6、AOP概述
- AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。
- AOP是Spring框架中的一個重要內容,是函數式編程的一種衍生範型。
- 利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。
- AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性代碼。
- 經典應用:事務管理、性能監視、安全檢查、緩存 、日誌等。
- AOP實現原理:AOP底層採用代理機制進行實現,spring採用 jdk 的動態代理Proxy和 cglib字節碼增強。
7、AOP術語
- target:目標類,需要被代理的類。例如:UserService
- Joinpoint(連接點):所謂連接點是指那些可能被攔截到的方法。例如:所有的方法
- PointCut 切入點:已經被增強的連接點。例如:addUser()
- advice 通知/增強,增強代碼。例如:after、before
- Weaving(織入):是指把增強advice應用到目標對象target來創建新的代理對象proxy的過程.
- proxy 代理類
- Aspect(切面): 是切入點pointcut和通知advice的結合
一個切入點和一個通知,組成成一個特殊的面。
8、JDK動態代理和cglib 增強字節碼的區別
JDK動態代理只能用於有接口的實現類,而cglib 增強字節碼既可以用於有接口的實現類,也可以用於沒有接口的類。
9、Spring半自動代理(JDK動態代理、cglib 增強字節碼)
第一步:導Jar包 |
|
|
|
第二步:目標類 |
|
|
|
第三步:切面類 |
|
|
|
第四步:spring配置 |
|
|
|
第五步:測試 |
|
|
注:Spring配置中<property name="optimize" value="true"></property>代表使用的是cglib 增強字節碼代理,註釋掉則使用JDK動態代理。
10、Spring全自動代理(JDK動態代理、cglib 增強字節碼)
第一步:導入jar包 |
第二步:Spring 的AOP配置 |
第三步:測試 |
|
注:Spring配置中proxy-target-class="true"代表使用的是cglib 增強字節碼代理,flase則使用JDK動態代理。
11、AspectJ——AOP框架
- AspectJ是一個基於Java語言的AOP框架。
- Spring2.0以後新增了對AspectJ切點表達式支持。
- @AspectJ 是AspectJ1.5新增功能,通過JDK5註解技術,允許直接在Bean類中定義切面。
- 新版本Spring框架,建議使用AspectJ方式來開發AOP。
- 主要用途:自定義開發。
12、AspectJ基於xml的使用
第一步:導包 |
|
|
|
第二步:實現類和切面類 |
|
|
|
第三步:spring的xml配置 |
|
|
|
第四步:測試 |
|
|
13、AspectJ基於註解的使用
第1步:聲明使用註解 |
|
|
|
第2步:註解service和切面bean |
|
|
|
|
|
第3步:聲明切面 |
|
|
|
第4步:聲明前置通知 |
|
|
|
第5步:聲明公共切入點 |
|
|
|
第6步:聲明後置通知 |
|
|
|
第7步:聲明環繞通知 |
|
|
|
第8步:聲明異常通知 |
|
|
|
第9步:聲明最終通知 |
|
|