1、攔截器和過濾器區別
1. 原理不同:
攔截器是基于java的反射機制,而過濾器采用責任鏈模式是基于函數回調的。
2. 使用范圍不同:
過濾器Filter的使用依賴于Tomcat等容器,導致它只能在web程序中使用
攔截器是一個Sping組件,由Spring管理,不依賴于Tomcat容器,是可以單獨使用的。也可以應用于Application、Swing容器中。
3.執行順序不同:
先過濾器后攔截器
4.注入Bean情況不同:
攔截器加載的時間點在springcontext之前,而Bean又是由spring進行管理。
在注冊攔截器之前,先將Interceptor 手動進行注入
2、什么是AOP? 有哪些AOP的概念?
AOP(Aspect-Oriented Programming)是一種編程思想,它通過將應用程序分解成多個切面,來實現對應用程序進行橫向切割的目的,從而實現代碼的復用和系統的解耦。
AOP的核心思想是將與業務邏輯無關的代碼,如日志、事務、異常處理等,從業務邏輯代碼中分離出來,形成獨立的模塊,以便于復用和維護。
AOP的一些概念如下:
切面(Aspect):切面是一個模塊化的橫切關注點,它通過對某個點進行攔截,來實現對目標對象的增強。
連接點(Join Point):連接點是在應用程序執行過程中能夠插入切面的點,例如方法調用或異常處理等。
切入點(Pointcut):切入點是一組連接點的集合,它定義了在哪些連接點處應用切面。
通知(Advice):通知是切面在連接點上執行的操作,例如在方法調用前、方法調用后、方法返回時或方法拋出異常時執行的操作。
織入(Weaving):織入是將切面應用到目標對象并創建新的代理對象的過程。織入可以在編譯時、類加載時或運行時進行。
目標對象(Target Object):目標對象是應用程序中需要被增強的對象。
代理對象(Proxy Object):代理對象是一個中間件對象,它攔截對目標對象的訪問并調用切面提供的通知。
通過AOP的概念,我們可以將應用程序按照不同的橫向關注點進行切割,并將與業務邏輯無關的代碼分離出來,從而提高應用程序的可維護性和可擴展性。常見的AOP框架有Spring AOP和AspectJ。
3、AOP 有哪些應用場景?
AOP(Aspect-Oriented Programming)可以在許多場景下被應用。以下是一些AOP的應用場景:
日志記錄:在方法調用前后記錄日志,用于排查錯誤和分析系統性能。
安全性控制:控制用戶對系統中某些資源或方法的訪問權限,確保系統安全。
事務管理:在方法調用前后開啟、提交或回滾事務,確保數據的一致性和完整性。
緩存管理:通過在方法調用前檢查緩存中是否有目標對象的緩存結果,減少系統的響應時間和網絡開銷。
性能監控:記錄方法調用的時間、次數和異常等信息,以便于分析系統性能。
異常處理:在方法調用過程中捕獲異常并記錄或通知開發人員,以便于及時處理異常情況。
數據驗證:在方法調用前對輸入參數進行驗證,確保輸入數據的正確性和合法性。
代碼復用:將與業務邏輯無關的代碼抽離出來,以便于復用和維護。
4、Bean Factory和ApplicationContext有什么區別?
Bean Factory和ApplicationContext都是Spring框架中負責管理Bean的容器,但是它們之間有一些區別:
Bean Factory是Spring框架的基礎設施,提供了最基本的IOC功能,而ApplicationContext是Bean Factory的超集,包含了Bean Factory的所有功能,并且還提供了更多的企業級特性,如事件傳播、國際化、AOP等。
在實現上,ApplicationContext是Bean Factory的擴展,ApplicationContext除了提供了Bean Factory的所有功能之外,還提供了更多的功能,例如:資源管理、事件發布等等。
一般來說,Bean Factory適用于輕量級應用,而ApplicationContext則適用于大型企業應用,因為ApplicationContext提供了更多的企業級特性和功能,例如:事務管理、遠程訪問、JNDI訪問等等。
ApplicationContext在啟動時就實例化所有的單例Bean,而Bean Factory是在獲取Bean時才進行實例化。
總之,ApplicationContext是Bean Factory的超集,提供了更多的企業級特性和功能,一般情況下我們優先使用ApplicationContext。