Spring切入點表達式

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>

發佈了271 篇原創文章 · 獲贊 193 · 訪問量 82萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章