日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringAOP的Aspectj方式*

發(fā)布時(shí)間:2023/12/3 javascript 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringAOP的Aspectj方式* 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SpringAOP的Aspectj介紹

問題:

目前我們已經(jīng)能夠使用SpringAOP的SchemaBased方式來實(shí)現(xiàn)功能擴(kuò)展。在使用SchemaBased方式實(shí)現(xiàn)功能擴(kuò)展時(shí),發(fā)現(xiàn)一個(gè)擴(kuò)展代碼就需要聲明對(duì)應(yīng)的實(shí)現(xiàn)了指定的接口的類,這樣造成代碼的結(jié)構(gòu)體系過于繁雜。一個(gè)通知一個(gè)類。

解決:

在一個(gè)類中聲明所有的通知方法。這樣又會(huì)造成Spring容器無法區(qū)分該類中的方法那些是前置,那些是后置,那些是環(huán)繞,那些是異常了,怎么辦?在配置文件中的切面配置中,指明哪些方法是前置,哪些是后置即可。

實(shí)現(xiàn):

SpringAOP的AspectJ方式
① 創(chuàng)建一個(gè)web項(xiàng)目并導(dǎo)入AOP的相關(guān)jar包
② 在src下聲明mvc的包結(jié)構(gòu)
③在src下創(chuàng)建并配置applicationcontext.xml
a. 切點(diǎn)的bean
b.擴(kuò)展類的bean
c. 配置切面 聲明切點(diǎn) 聲明前置通知 聲明后置通知 聲明環(huán)繞通知 聲明異常通知
④ 獲取Spring容器中的擴(kuò)展對(duì)象完成功能操作。

代碼實(shí)現(xiàn)
通知類:

applicationcontext.xml

Acspectj和SchemaBased的異同

  • 相同點(diǎn):
  • 在不修改源碼的情況下都能實(shí)現(xiàn)功能的擴(kuò)展。

  • 不同點(diǎn):
  • (1) SchemaBased方式基于接口來區(qū)別前置和后置和環(huán)繞和異常通知的,而AspectJ方式是在配置文件中使用標(biāo)簽來區(qū)分。

    (2) AspectJ方式在配置中的配置方式發(fā)現(xiàn)其切點(diǎn)的聲明以及對(duì)應(yīng)的通知組裝中,切點(diǎn)只在Aop:aspect標(biāo)簽下有效。而SchemaBased方式聲明的切點(diǎn)在全局有效.SchemaBased的切點(diǎn)的通用性比AspectJ方式要好。

    (3) AspectJ方式擴(kuò)展涉及參數(shù)的流程:

    ① 切點(diǎn)方法中聲明形參完成數(shù)據(jù)處理

    ② 修改通知方法聲明形參接收對(duì)應(yīng)的實(shí)參

    ③ 修改配置文件中的切點(diǎn)聲明,切點(diǎn)中的方法上聲明對(duì)應(yīng)的參數(shù)類型。同時(shí)還要聲明參數(shù)的形參名

    ④ 在通知的配置上聲明參數(shù)名


    (4) 在SchemaBased方式涉及形參的流程:

    ① 在切點(diǎn)方法上聲明形參完成功能處理

    ② 在配置文件中修改切點(diǎn)的路徑為帶有參數(shù)的切點(diǎn)

    ③ 直接在通知方法中的形參中的Object[]中獲取參數(shù)使 用即可

    總結(jié):不涉及到參數(shù)問題使用AspectJ方式完成功能擴(kuò)展比較方便,但是涉及到參數(shù)后使用SchemaBased方式比較方便。

    SpringAOP的切點(diǎn)的聲明格式

    ① 切點(diǎn)是某包某類的無參數(shù)的方法:
    示例:
    execution(* com.bjsxt.service.impl.Student.test())
    ② 切點(diǎn)是某包某類帶有參數(shù)的方法
    示例:
    execution(* com.bjsxt.service.impl.Student.test(String,int))
    ③ 切點(diǎn)是某包某類的某個(gè)同名的所有方法
    示例:… 表示任意個(gè)數(shù)任意類型的參數(shù)
    execution(* com.bjsxt.service.impl.Student.test(…))
    ④ 切點(diǎn)是某包下的某類的所有方法
    示例:表示任意的類名,方法名,包名
    execution( com.bjsxt.service.impl.Student.(…))
    ⑤ 切點(diǎn)是某包下的所有類的所有方法
    示例: 表示任意的類名,方法名,包名
    execution(* com.bjsxt.service.impl..(…))

    總結(jié)

    以上是生活随笔為你收集整理的SpringAOP的Aspectj方式*的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。