51. 解釋AOP
面向切面的編程,或AOP, 是一種編程技術(shù),允許程序模塊化橫向切割關(guān)注點(diǎn),或橫切典型的責(zé)任劃分,如日志和事務(wù)管理。
52. Aspect 切面
AOP核心就是切面,它將多個(gè)類的通用行為封裝成可重用的模塊,該模塊含有一組API提供橫切功能。比如,一個(gè)日志模塊可以被稱作日志的AOP切面。根據(jù)需求的不同,一個(gè)應(yīng)用程序可以有若干切面。在Spring AOP中,切面通過帶有@Aspect注解的類實(shí)現(xiàn)。
52. 在Spring AOP 中,關(guān)注點(diǎn)和橫切關(guān)注的區(qū)別是什么?
關(guān)注點(diǎn)是應(yīng)用中一個(gè)模塊的行為,一個(gè)關(guān)注點(diǎn)可能會(huì)被定義成一個(gè)我們想實(shí)現(xiàn)的一個(gè)功能。
橫切關(guān)注點(diǎn)是一個(gè)關(guān)注點(diǎn),此關(guān)注點(diǎn)是整個(gè)應(yīng)用都會(huì)使用的功能,并影響整個(gè)應(yīng)用,比如日志,安全和數(shù)據(jù)傳輸,幾乎應(yīng)用的每個(gè)模塊都需要的功能。因此這些都屬于橫切關(guān)注點(diǎn)。
54. 連接點(diǎn)
連接點(diǎn)代表一個(gè)應(yīng)用程序的某個(gè)位置,在這個(gè)位置我們可以插入一個(gè)AOP切面,它實(shí)際上是個(gè)應(yīng)用程序執(zhí)行Spring AOP的位置。
55. 通知
通知是個(gè)在方法執(zhí)行前或執(zhí)行后要做的動(dòng)作,實(shí)際上是程序執(zhí)行時(shí)要通過SpringAOP框架觸發(fā)的代碼段。
Spring切面可以應(yīng)用五種類型的通知:
before:前置通知,在一個(gè)方法執(zhí)行前被調(diào)用。
after:?在方法執(zhí)行之后調(diào)用的通知,無論方法執(zhí)行是否成功。
after-returning:?僅當(dāng)方法成功完成后執(zhí)行的通知。
after-throwing:?在方法拋出異常退出時(shí)執(zhí)行的通知。
around:?在方法執(zhí)行之前和之后調(diào)用的通知。
56. 切點(diǎn)
切入點(diǎn)是一個(gè)或一組連接點(diǎn),通知將在這些位置執(zhí)行??梢酝ㄟ^表達(dá)式或匹配的方式指明切入點(diǎn)。
57. 什么是引入?
引入允許我們?cè)谝汛嬖诘念愔性黾有碌姆椒ê蛯傩浴?/p>
58. 什么是目標(biāo)對(duì)象?
被一個(gè)或者多個(gè)切面所通知的對(duì)象。它通常是一個(gè)代理對(duì)象。也指被通知(advised)對(duì)象。
59. 什么是代理?
代理是通知目標(biāo)對(duì)象后創(chuàng)建的對(duì)象。從客戶端的角度看,代理對(duì)象和目標(biāo)對(duì)象是一樣的。
60. 有幾種不同類型的自動(dòng)代理?
BeanNameAutoProxyCreator
DefaultAdvisorAutoProxyCreator
Metadata autoproxying
61. 什么是織入,什么是織入應(yīng)用的不同點(diǎn)?
織入是將切面和到其他應(yīng)用類型或?qū)ο筮B接或創(chuàng)建一個(gè)被通知對(duì)象的過程。
織入可以在編譯時(shí),加載時(shí),或運(yùn)行時(shí)完成。
62. 解釋基于XML Schema方式的切面實(shí)現(xiàn)。
在這種情況下,切面由常規(guī)類以及基于XML的配置實(shí)現(xiàn)。
63. 解釋基于注解的切面實(shí)現(xiàn)
在這種情況下(基于@AspectJ的實(shí)現(xiàn)),涉及到的切面聲明的風(fēng)格與帶有java5標(biāo)注的普通java類一致。