在使用AOP時,指定一個pointcut的同時會定義一個expression,來表示對什麼方法使用AOP。
類似expression="execution(public * com.baidu.map.*Ctr.*Handle(..))"等
語法爲:execution(修飾符 返回值 包名.類名/接口名.方法名(參數列表))
其中:
1、返回類型、方法名、參數是必須有的.
2、*表示任意值. 比如返回類型,方法名等.
3、(..)可以代表所有參數,(*)代表一個參數,(*,String)代表第一個參數爲任何值,第二個參數爲String類型.
舉例說明:
1、任意公共方法的執行:
execution(public * *(..))
2、任何一個以“set”開始的方法的執行:
execution(* set*(..))
3、AccountService 接口的任意方法的執行:
execution(* com.xyz.service.AccountService.*(..))
4、定義在service包裏的任意方法的執行:
execution(* com.xyz.service.*.*(..))
5、定義在service包和所有子包裏的任意類的任意方法的執行:
execution(* com.xyz.service..*.*(..))
6、定義在pointcutexp包和所有子包裏的JoinPointObjP2類的任意方法的執行:
execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
最靠近(..)的爲方法名,靠近.*(..))的爲類名或者接口名
下面是一個基於配置文件的AOP環繞通知
<!--配置第三方平臺請求日誌切面-->
<bean id="logHandler" class="com.baidu.map.advice.LogHandler" />
<aop:config>
<aop:aspect id="logAspect" ref="logHandler">
<aop:pointcut id="logPointCut" expression="execution(public * com.baidu.map.itf.*Ctr.*Handle(..))"/>
<aop:around method="doAround" pointcut-ref="logPointCut"/>
</aop:aspect>
</aop:config>