日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

spring框架之切面編程步驟說明

 

今天學(xué)習(xí)內(nèi)容安排如下:

  • 切面配置的核心三步驟。
  • 傳統(tǒng)sprin配置和AspectJ配置都學(xué)下,xml和注解都使用下。
  • 同時(shí)為了測(cè)試,補(bǔ)充說明一下spring的junit集成,幾天前沒來得及學(xué)的知識(shí)點(diǎn)。

一、傳統(tǒng)Spring AOP編程

這種方式在現(xiàn)在的開發(fā)中基本不會(huì)使用,但為了更好地和AspectJ對(duì)比還是做一個(gè)了解。

1切面編程開發(fā)三步驟

spring框架之切面編程步驟說明

 

①確定要增強(qiáng)的target對(duì)象

也就是哪些類需要增強(qiáng)?對(duì)spring來說,目標(biāo)就是bean對(duì)象。

②配置增強(qiáng)

Advice通知,也就是我們要增強(qiáng)一個(gè)什么功能,會(huì)在②對(duì)應(yīng)的類中說明。

③配置切入點(diǎn)

即要攔截的連接點(diǎn)有哪些(方法)

  • id="myPointcut":切入點(diǎn)唯一標(biāo)識(shí)。
  • expression表達(dá)式:匹配方法的。

expression=bean(*Service)表示在spring容器中,所有id/name以Service結(jié)尾的bean都能被攔截。

④配置切面

也就是:要對(duì)哪些方法(pointcut),進(jìn)行怎樣的增強(qiáng)?(advice)

  • advice-ref="timeLogAdvice",即對(duì)應(yīng)怎樣的增強(qiáng)。
  • pointcut-ref="myPointcut",即對(duì)應(yīng)哪些方法需要增強(qiáng)。

2編寫傳統(tǒng)aop的Advice通知類

spring框架之切面編程步驟說明

 

①環(huán)繞通知

通知主要有四類,即增強(qiáng)的位置:

  • 前置通知MethodBeforeAdvice:在目標(biāo)方法執(zhí)行前實(shí)施增強(qiáng)。
  • 后置通知AfterReturningAdvice:在目標(biāo)方法執(zhí)行后實(shí)施增強(qiáng)。
  • 環(huán)繞通知MethodInterceptor:在目標(biāo)方法執(zhí)行前后實(shí)施增強(qiáng)。
  • 異常拋出通知ThrowsAdvice:在方法拋出異常后實(shí)施增強(qiáng)。

在這里因?yàn)槲覀冃枰诜椒ㄇ昂髮?shí)施增強(qiáng),所以我們使用環(huán)繞通知,需要實(shí)現(xiàn)對(duì)應(yīng)接口。

注意:接口不要弄混淆了,是org.aoplliance中的接口,不是cglib中的。

spring框架之切面編程步驟說明

 

②invoke方法

參數(shù)為Methodinvocation。

③調(diào)用目標(biāo)對(duì)象的方法

這個(gè)就相當(dāng)于method.invoke()。

④記錄日志

這個(gè)涉及到日志配置文件的編寫。

3使用spring的junit集成測(cè)試

spring框架之切面編程步驟說明

 

①@RunWith注解和@ContextConfiguration注解

  • 通過@RunWith注解,使用junit整合spring。
  • 通過@ContextConfiguration注解,指定spring容器的位置。

②@Autowired注解

通過@Autowired注解,注入需要測(cè)試的對(duì)象,在這里注意2點(diǎn):

  • 將測(cè)試對(duì)象注入到測(cè)試用例中。
  • 測(cè)試用例不需要配置<context:annotion-config/>,因?yàn)槭褂脺y(cè)試類運(yùn)行的時(shí)候,會(huì)自動(dòng)啟動(dòng)注解的支持。

③調(diào)用測(cè)試方法完成測(cè)試

二、Aspectj(xml)配置AOP

上述傳統(tǒng)方法中需要實(shí)現(xiàn)對(duì)應(yīng)的通知接口,而在Aspectj中就不需要了。

1Xml配置AOP開發(fā)方法還是三步

  • 確定要增強(qiáng)誰?(bean)
  • 確認(rèn)增強(qiáng)什么功能?(通知advice)
  • 確定需要增強(qiáng)的方法有哪些?(切入點(diǎn)pointcut)

而如何將它們對(duì)應(yīng)起來就需要配置切面了。

spring框架之切面編程步驟說明

 

①②③和傳統(tǒng)的配置是一樣的,不再贅述,只說不同的地方。

④配置切面

通知是有好幾種的,重點(diǎn)也就是這個(gè)通知類型,將其弄懂了,xml和注解也就簡(jiǎn)單了:

  • aop:before也就是前置通知。
  • aop:after-returning也就是后置通知。
  • aop:around 也就是環(huán)繞通知。
  • aop:after-throwing也就是拋出通知。
  • aop:after也就是最終通知。

method:通知類中的方法名;pointcut-ref="myPointcut":注入切入點(diǎn)。

2通知類的編寫

因?yàn)闇y(cè)試方法和上述是差不多的,所以不再贅述,將測(cè)試結(jié)果放在一起說明:

spring框架之切面編程步驟說明

 

配置文件中給指定方法設(shè)置通知的類型,beforeTest方法就是前置通知。

增強(qiáng)CustomerServiceImpl類中的所有方法,前置通知就相當(dāng)于在對(duì)應(yīng)方法之前執(zhí)行增強(qiáng)的功能。

joinPoint就是連接點(diǎn),在這里也就是目標(biāo)對(duì)象中的所有方法,該參數(shù)是一個(gè)可選參數(shù),其有三個(gè)常用的方法:

  • getSignature()方法:獲取目標(biāo)對(duì)象中的方法。
  • getThis()方法:獲取的是代理對(duì)象。
  • getTarget()方法:獲取的也就是目標(biāo)對(duì)象。

我這邊只說明一下前置通知,其它的基本上都是大同小異的。

不過每個(gè)通知都有自己的應(yīng)用場(chǎng)景,這個(gè)以后遇到具體的場(chǎng)景了再說明。

我會(huì)在以后做一個(gè)其對(duì)應(yīng)的應(yīng)用合集。

三、Aspectj注解配置AOP

會(huì)了xml,注解就真心很簡(jiǎn)單了。

1配置xml文件

spring框架之切面編程步驟說明

 

①配置注解掃描

②配置aspectj的自動(dòng)代理機(jī)制

設(shè)置好這兩個(gè)標(biāo)簽之后,就可以全部都使用注解配置AOP了

2通知類的編寫

spring框架之切面編程步驟說明

 

①確認(rèn)目標(biāo)對(duì)象

用注解將該類放入spring容器中。

②確認(rèn)增強(qiáng)的功能

@Aspect注解即表示,將其作為aop管理。

③環(huán)繞通知

ProceedingJoinPoint是環(huán)繞通知中的一個(gè)參數(shù),翻譯過來就是可執(zhí)行的連接點(diǎn)的意思。

通過該參數(shù)調(diào)用proceed()方法就相當(dāng)于執(zhí)行原目標(biāo)對(duì)象中的方法。

④拋出通知

這個(gè)是如果出現(xiàn)了異常,就會(huì)執(zhí)行該增強(qiáng)功能,也就相當(dāng)于try…catch。

當(dāng)然還有其它幾種通知:

  • @Before前置通知,相當(dāng)于BeforeAdvice。
  • @AfterReturning后置通知,相當(dāng)于AfterReturningAdvice。
  • @After最終final通知,不管是否異常,該通知都會(huì)執(zhí)行。

最后

AOP這塊的知識(shí)點(diǎn)有點(diǎn)生澀難懂,自己無論是學(xué)習(xí)效率還是筆記質(zhì)量這塊都下降了很多,這我也是能感受到的。

只能說目前來說所追求的還是一個(gè)學(xué)習(xí)進(jìn)度,保證每天都有輸出,至于質(zhì)量問題只能留待以后一點(diǎn)點(diǎn)優(yōu)化了。

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

分享到:
標(biāo)簽:切面 編程
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定