Spring之AOP面試題


1、什么是Spring AOP?
在面向對象編程中,關鍵的單元是對象,但AOP的關鍵單元是切面(關注點),像日志或者事務這些分散的切面(橫切關注點——可以影響到整個應用的關注點)應該被盡量地集中到一個地方以方便管理(事務管理、權限、日志、安全)。而AOP就是作用於這些橫切關注點,使得代碼在當下和將來都變得容易維護,一般AOP通過如下方式進行使用:
使用AspectJ 注解風格
使用Spring XML 配置風格

2、簡述一下Spring AOP的設計原理
主要的分代理的創建和代理的調用兩部分,比如UML圖:

1)代理的創建
創建代理工廠:攔截器數組,目標對象接口數組,目標對象。
創建代理工廠時,默認會在攔截器數組尾部再增加一個默認攔截器 —— 用於最終的調用目標方法。
當調用 getProxy 方法的時候,會根據接口數量大余 0 條件返回一個代理對象(JDK or Cglib)。
注意:創建代理對象時,同時會創建一個外層攔截器,這個攔截器就是 Spring 內核的攔截器,用於控制整個 AOP 的流程。
2)代理的調用
當對代理對象進行調用時,就會觸發外層攔截器。
外層攔截器根據代理配置信息,創建內層攔截器鏈。創建的過程中,會根據表達式判斷當前攔截是否匹配這個攔截器。而這個攔截器鏈設計模式就是職責鏈模式。
當整個鏈條執行到最后時,就會觸發創建代理時那個尾部的默認攔截器,從而調用目標方法,最后返回。

3、AOP有哪些可用的實現?
基於Java的主要AOP實現有:
AspectJ
Spring AOP
JBoss AOP

4、Spring中有哪些通知類型(advice)?

Before(前置通知): 連接點之前執行,除非拋異常,否則沒有能力中斷執行流(@Before 注解)
After(后置通知): 無論連接點是通過什么方式退出的(正常返回或者拋出異常)都會在結束后執行這些Advice(@After 注解)
After Retuning(返回通知): 在連接點正常結束之后(沒有拋出異常正常返回)執行的Advice(@AfterReturning 注解)
After Throwing(異常通知): 如果方法通過拋出異常來退出的話,這個Advice就會被執行(@AfterThrowing 注解)
Around(環繞通知): 圍繞連接點執行的Advice,就你一個方法調用(相對於合並前置后置)( @Around 注解)

5、在Spring AOP中關注點和橫切關注點有什么不同?
關注點:我們在應用的模塊中實現以解決特定業務問題的方法。比如庫存管理、航運管理、用戶管理等。

橫切關注點:貫穿整個應用程序的關注點。像事務管理、權限、日志、安全等。

6、Spring AOP的代理是什么?
Spring AOP是基於代理實現的,默認為標准的 JDK 動態代理。這使得任何接口(或者接口的集合)可以被代理。
Spring AOP 也使用 CGLIB 代理。如果業務對象沒有實現任何接口那么默認使用CGLIB。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM