execution 其格式爲:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
returning type pattern
,name pattern
, parameters pattern
是必須的。
ret-type-pattern
:可以爲*
表示任何返回值,全路徑的類名等.。
name-pattern
:指定方法名,*
代表所有,set*
代表以set開頭的所有方法。
parameters pattern
:指定方法參數(聲明的類型),(..)
代表所有參數,(*)
代表一個參數,(*,String)
代表第一個參數爲任何值,第二個爲String類型。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--DAO實例-->
<bean id="userDao" class="AopForXML.UserDao"></bean>
<bean id="orderDao" class="AopForXML.OrderDao"/>
<!--切面類實例-->
<bean id="myAop" class="AopForXML.MyAop"/>
<!--Aop配置-->
<aop:config>
<!--定義一個切入點表達式:攔截那些方法-->
<!--<aop:pointcut id="pt" expression="execution(* AopForXML.*.*(..))"/>-->
<!--攔截所有public方法-->
<!--<aop:pointcut id="pt" expression="execution(public * *(..))"/>-->
<!--攔截所有set開頭的方法-->
<!--<aop:pointcut id="pt" expression="execution(* set*(..))"/>-->
<!--攔截所有save開頭的方法-->
<!--<aop:pointcut id="pt" expression="execution(* save*(..))"/>-->
<!--攔截指定類的指定方法-->
<!--<aop:pointcut id="pt" expression="execution(* AopForXML.OrderDao.save())"/>-->
<!--<aop:pointcut id="pt" expression="execution(public * AopForXML.OrderDao.save())"/>-->
<!--攔截指定類的所有方法-->
<!--<aop:pointcut id="pt" expression="execution(public * AopForXML.OrderDao.*())"/>-->
<!--攔截指定包以及其子包下所有類的所有方法-->
<!--<aop:pointcut id="pt" expression="execution(* AopForXML..*.*(..))"/>-->
<!-- 多個表達式-->
<!--<aop:pointcut id="pt" expression="execution(* AopForXML.UserDao.save()) ||
execution(* AopForXML.OrderDao.save())"/>
<aop:pointcut id="pt" expression="execution(* AopForXML.UserDao.save()) or
execution(* AopForXML.OrderDao.save())"/>-->
<!--取非值,不想攔截-->
<!--<aop:pointcut id="pt" expression="!execution(* AopForXML.UserDao.save())"/>-->
<aop:pointcut id="pt" expression=" not execution(* AopForXML.UserDao.save())"/>
<!--切面-->
<aop:aspect ref="myAop">
<aop:before method="begin" pointcut-ref="pt"/>
<aop:after method="commite" pointcut-ref="pt"/>
<!--返回後通知-->
<aop:after-returning method="afterReturning" pointcut-ref="pt"/>
<!--異常通知-->
<aop:after-throwing method="afterThrowing" pointcut-ref="pt"/>
<!--環繞通知-->
<aop:around method="around" pointcut-ref="pt"/>
</aop:aspect>
</aop:config>
</beans>