溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

sping面向切面編程怎么實(shí)現(xiàn)引入通知

發(fā)布時(shí)間:2021-12-27 17:05:11 來源:億速云 閱讀:138 作者:iii 欄目:云計(jì)算

這篇文章主要介紹“sping面向切面編程怎么實(shí)現(xiàn)引入通知”,在日常操作中,相信很多人在sping面向切面編程怎么實(shí)現(xiàn)引入通知問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”sping面向切面編程怎么實(shí)現(xiàn)引入通知”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

引入通知的目的就是在任意的連接點(diǎn)引入我想要的通知,例如前面四個(gè)通知案例的運(yùn)行結(jié)果:

前置通知被調(diào)用
調(diào)用環(huán)繞通知前
hi 王大錘
調(diào)用環(huán)繞通知后
后置通知被調(diào)用
前置通知被調(diào)用
調(diào)用環(huán)繞通知前
bye 王大錘
調(diào)用環(huán)繞通知后
后置通知被調(diào)用

可以看出在被代理類Test1Service的sayHello()以及sayBye()方法(這個(gè)兩個(gè)連接點(diǎn))切入通知;可是現(xiàn)在我只想在sayHello()方法(這一個(gè)連接點(diǎn))上切入通知該怎么辦呢?這就要使用到引入通知,其實(shí)說白了就是在配置文件中進(jìn)行配置。(我現(xiàn)在要求環(huán)繞通知只切入到sayHello()方法上)

修改前面案例的配置文件beans.xml

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <!-- 配置被代理的對(duì)象 -->
    <bean id="test1Service" class="com.hubin.aop.Test1Service">
        <property name="name" value="王大錘" />
    </bean>
    <!-- 配置前置通知 -->
    <bean id="myMethodBeforeAdvice" class="com.hubin.aop.MyMethodBeforeAdvice" />

    <!-- 配置后置通知 -->
    <bean id="myMethodAfterAdvice" class="com.hubin.aop.MyMethodAfterAdvice" />

    <!-- 配置環(huán)繞通知 -->
    <bean id="myMethodAroundAdvice" class="com.hubin.aop.MyMethodAroundAdvice" />

    <!-- 配置異常通知 -->

    <bean id="myMethodThrowsAdvice" class="com.hubin.aop.MyMethodThrowsAdvice" />

    <!-- 引入通知定義通知的切入點(diǎn) -->
    <bean id="annotationAdvice"
        class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
        <property name="advice" ref="myMethodAroundAdvice"></property>
        <property name="mappedNames">
            <list>
                <value>sayHello</value>
            </list>
        </property>
    </bean>

    <!-- 配置代理對(duì)象(代理對(duì)象不需要我們自己寫,已經(jīng)有現(xiàn)成的ProxyFactoryBean類存在了) -->
    <bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!-- 代理接口集 -->
        <property name="proxyInterfaces">
            <list>
                <!--ProxyFactoryBean類會(huì)實(shí)現(xiàn)下列接口(必須是接口的全路徑) -->
                <value>com.hubin.aop.TestServiceInter</value>
                <value>com.hubin.aop.TestServiceInter2</value>
            </list>
        </property>

        <!-- 把通知織入到代理對(duì)象相當(dāng)于將通知和代理對(duì)象關(guān)聯(lián) -->
        <property name="interceptorNames">
            <list>
                <!-- 必須和配置通知的ben的id對(duì)應(yīng)值是相同的 -->
                <value>myMethodBeforeAdvice</value>
                <value>myMethodAfterAdvice</value>

                <!-- 綁定引用通知 -->
                <value>annotationAdvice</value>
                <value>myMethodThrowsAdvice</value>
            </list>
        </property>

        <!-- 配置被代理對(duì)象,ref必須和配置代理對(duì)象的id對(duì)應(yīng)值相同 -->
        <property name="target" ref="test1Service" />
    </bean>
</beans>

運(yùn)行結(jié)果:

前置通知被調(diào)用
調(diào)用環(huán)繞通知前
hi 王大錘
調(diào)用環(huán)繞通知后
后置通知被調(diào)用
前置通知被調(diào)用
bye 王大錘
后置通知被調(diào)用

到此,關(guān)于“sping面向切面編程怎么實(shí)現(xiàn)引入通知”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI