Pointcut是Join Point的集合,它是程序中需要注入Advice的位置的集合。Spring主要提供了3種切入點的實現:
1.靜態切入點;
2.動態切入點;
3.自定義切入點。
靜態切入點
只限於給定的方法和目標類,而不考慮方法的參數。Spring在調用鼎泰切入點時只在第一次的時候計算靜態切入點的位置,然后把它緩存起來,以后就不需要在進行計算。使用org.springframework.aso.support.RegexpMethodPointcut 可以實現靜態切入點。RegexpMethodPointcut是一個通用的正則表達式切入點,它是通過Jakarta ORO來實現的,需要把jakarta-oro-2.0.8.jar加入到ClassPath中,它的正則表達式語法和Jakarta ORO的正則表達式語法是一樣的。使用RegexpMethodPointcut的一個示例代碼如下:
1 <bean id="settersAndAbsquatulatePointcut" class="org.springframework.aop.support.RegexpMethodPointcut"> 2 <property name="patterns"> 3 <!--設定切入點> 4 <list> 5 <value>.*save.*</value> 6 <value>.*do.*</value> 7 </list> 8 </porperty> 9 </bean>
.*save.*:表示所有以save開頭的方法都是切入點
.*do.*:表示所有以do開頭的方法都是切入點
動態切入點
動態切入點與靜態切入點的區別是,它不僅限定於給點的方法和類,動態切入點還可以以指定方法的參數。因為參數的變化性,所有動態切入點不能緩存,需要么次調用的時候都進行計算,因此使用動態切入點有很大性能損耗。
當切入點需要在執行時根據參數值來調用通知時,就需要使用動態切入點。Spring提供了一個內建的動態切入點:控制流切入點。此切入點匹配基於當前線程的調用堆棧。開發人員只有在當前線程執行時找到特定的類和特定的方法才返回true。
其實大多數的切入點可以使用靜態切入點,所有很少有機會創建動態切入點。
自定義切入點
暫不學習