spring in action小结4.1
1 橫切關注點:可以被描述為影響應用多處的功能。橫切關注點可以被模塊化為特殊的類,這些類被稱為切面。
2 AOP自己的術語,通知(Advice)、切點(pointcut)、連接點(joinpoint)
切面的工作被稱為通知,通知定義了切面是什么以及如何使用,還解決了何時執行這個工作的問題。
?
3 切面的通知類型
1)前置通知(Before)2)后置通知(After)3)返回通知(After-returning)4)異常通知(After-throwing)5)環繞通知(Around)
?
4 連接點(join point):是在應用執行過程中能夠插入切面的一個點。切面代碼可以利用這個點插入到應用的正常流程中,并添加新的行為。
?
5 切點(Pointcut):切點有助于縮小切面通知的連接點范圍。如果說通知定義了切面的“什么”和“何時”的話,切點就定義了“何處”。切點的定義會匹配通知所要所要織入的一個或多個連接點。
?
6 切面(Aspect):切面是通知和切點的結合。通知和切點共同定義了切面的全部內容--他是什么,在何時和何處完成其功能。
?
7 引入(Introduction):引入允許我們向現有的類添加新方法或屬性。
?
8 織入(Weaving):織入是把切面應用到目標對象并創建新的代理對象的過程。切面在指定的連接點被織入到目標對象中。
可以進行織入的點
1)編譯器:切面在目標類編譯時被織入,這種方式需要特殊的編譯器。
2)類加載期:切面在目標類加載到 JVM 時被織入。需要特殊的類加載器,他可以在目標類被引入應用之前增強該目標類的字節碼。
3)運行期:切面在應用運行的某個時刻被織入。一般情況下,在織入切面時,AOP容器會為目標對象動態的創建一個代理對象。Spring AOP就是以這種方式織入切面的。
?
9 Spring是基于動態代理的,所以spring只支持方法連接點,并且不支持構造器連接點,我們無法在bean創建時通知應用。
?
10 spring支持的切點表達式
?
| 指示器 | 描述 |
| arg() | 限制連接點匹配參數為指定類型的執行方法 |
| @args() | 限制連接點匹配參數由指定注解標注的執行方法 |
| execution() | 用于匹配時連接點的執行方法 |
| this() | 限制連接點匹配AOP代理的bean引用為指定類型的類 |
| target() | 限制連接點匹配目標對象為指定類型的類 |
| @target() | 限制連接點匹配特定的執行對象,這些對象對應的類要具有指定類型的注解 |
| within() | 限制連接點匹配指定類型 |
| @annotation | 限制匹配帶由指定注解的連接點 |
?
11 切入點表達式,spring具體到方法,因此指示器要指定到方法。在指示器中可以使用邏輯關系進一步限制切點位置。可以使用and/or/not。
?
12 spring的通知
| 注解 | 通知 |
| @After | 通知方法會在目標方法返回或拋出異常后調用 |
| @AfterReturning | 通知方法會在目標方法返回后調用 |
| @AfterThrowing | 通知方法會在目標方法拋出異常后調用 |
| @Around | 通知方法會將目標方法封裝起來 |
| @Bedore | 通知方法會在目標方法調用之前執行 |
?
13 定義切面
@Aspect public class MyInspect {/****/@Pointcut("execution(* com.dwzx.zjg.investfinance.buy.test.*.*(..))")public void performance() {}/*** */@Before("performance()")public void fun1() {System.out.println("fun1");}} @Pointcut定義了一個切點表達式,在其他方法中可以直接引用。?
14 開啟切面注解解析
在JavaConfig中使用如下方式,在配置類的類級別上使用@EnableAspectJAutoProxy 啟用自動代理功能。
@Configuration @EnableAspectJAutoProxy @ComponentScan public class ConcertConfig {/*** 聲明MyInspect Bean* @return*/@Beanpublic MyInspect myInspect() {return new MyInspect();} }?
總結
以上是生活随笔為你收集整理的spring in action小结4.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu2089 不要62 数位dp
- 下一篇: 【记录】vmware fusion 7