spring:《spring实战》读后感三
1.AOP術(shù)語:
通知(Advice)
? ? 切面的工作被稱為通知。同時通知還解決了何時執(zhí)行這個工作。
? ??Spring切面可以應(yīng)用5種類型的通知:
? ? ? ? ? 前置通知(Before) : 在目標(biāo)方法被調(diào)用之前調(diào)用通知功能;
? ? ? ? ? 后置通知(After) : 在目標(biāo)方法完成之后調(diào)用通知, 此時不會關(guān)心方法的輸出是什么;
? ? ? ? ? 返回通知(After-returning) : 在目標(biāo)方法成功執(zhí)行之后調(diào)用通知;
? ? ? ? ? 異常通知(After-throwing) : 在目標(biāo)方法拋出異常后調(diào)用通知;
? ? ? ? ? 環(huán)繞通知(Around) : 通知包裹了被通知的方法, 在被通知的方法調(diào)用之前和調(diào)用之后執(zhí)行自定義的行為;
切點(pointcut)
? ? ? ?一個切面并不需要通知應(yīng)用的所有連接點。 切點有助于縮小切面所通知的連接點的范圍。
連接點(join point)
? ??連接點是在應(yīng)用執(zhí)行過程中能夠插入切面的一個點。
切面(Aspect)
??切面是通知和切點的結(jié)合。 通知和切點共同定義了切面的全部內(nèi)容——它是什么, 在何時和何處完成其功能。
織入(Weaving)
? ?織入是把切面應(yīng)用到目標(biāo)對象并創(chuàng)建新的代理對象的過程。 切面在指定的連接點被織入到目標(biāo)對象中。 在目標(biāo)對象的生命周期里有多個點可以進行織入:
? ? ? 編譯期: 切面在目標(biāo)類編譯時被織入。 這種方式需要特殊的編譯器。 AspectJ的織入編譯器就是以這種方式織入切面的。
? ? ? 類加載期: 切面在目標(biāo)類加載到JVM時被織入。 這種方式需要特殊的類加載器(ClassLoader) , 它可以在目標(biāo)類被引入應(yīng)用之前增強該目標(biāo)類的字節(jié)碼。 AspectJ 5的加載時織入(load-timeweaving, LTW) 就支持以這種方式織入切面。
? ? ?運行期: 切面在應(yīng)用運行的某個時刻被織入。 一般情況下, 在織入切面時, AOP容器會為目標(biāo)對象動態(tài)地創(chuàng)建一個代理對象。Spring AOP就是以這種方式織入切面的。
?
2.Spring提供了4種類型的AOP支持:
? ??基于代理的經(jīng)典Spring AOP;
? ? 純POJO切面;
? ? @AspectJ注解驅(qū)動的切面;
? ? 注入式AspectJ切面(適用于Spring各版本)
?
3.Spring AOP所支持的AspectJ切點指示器
? ? ? ?Spring借助AspectJ的切點表達式語言來定義Spring切面
| AspectJ指 示器 | 描 述 |
| arg() | 限制連接點匹配參數(shù)為指定類型的執(zhí)行方法 |
| @args() | 限制連接點匹配參數(shù)由指定注解標(biāo)注的執(zhí)行方法 |
| execution() | 用于匹配是連接點的執(zhí)行方法 |
| this() | 限制連接點匹配AOP代理的bean引用為指定類型的類 |
| target | 限制連接點匹配目標(biāo)對象為指定類型的類 |
| @target() | 限制連接點匹配特定的執(zhí)行對象, 這些對象對應(yīng)的類要具有指定類 型的注解 |
| within() | 限制連接點匹配指定的類型 |
| @within() | 限制連接點匹配指定注解所標(biāo)注的類型(當(dāng)使用Spring AOP時, 方 法定義在由指定的注解所標(biāo)注的類里) |
| @annotation | 限定匹配帶有指定注解的連接點 |
4.使用注解創(chuàng)建切面
? ??使用注解來創(chuàng)建切面是AspectJ 5所引入的關(guān)鍵特性。AspectJ面向注解的模型可以非常簡便地通過少量注解把任意類轉(zhuǎn)變?yōu)榍忻妗?br /> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Spring使用AspectJ注解來聲明通知方法
| 注 解 | 通 知 |
| @After | 通知方法會在目標(biāo)方法返回或拋出異常后調(diào)用 |
| @AfterReturning | 通知方法會在目標(biāo)方法返回后調(diào)用 |
| @AfterThrowing | 通知方法會在目標(biāo)方法拋出異常后調(diào)用 |
| @Around | 通知方法會將目標(biāo)方法封裝起來 |
| @Before | 通知方法會在目標(biāo)方法調(diào)用之前執(zhí)行 |
? ? ? ?@Pointcut注解能夠在一個@AspectJ切面內(nèi)定義可重用的切點。
? ??
總結(jié)
以上是生活随笔為你收集整理的spring:《spring实战》读后感三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构:希尔排序(shell sort
- 下一篇: 数据结构:基数排序(Radix sort