Spring Bean的幾個相關問題

1、Spring Bean 作用域

Spring 容器中的 bean 可以分爲 5 個範圍(scope配置項)。
1)、singleton(單例模式) :這個模式是默認的,使用該屬性定義Bean時,IOC容器僅創建一個Bean實例,IOC容器每次返回的是同一個Bean實例。
2)、prototype(原型模式) :使用該屬性定義Bean時,IOC容器可以創建多個Bean實例,每次返回的都是一個新的實例。
3)、request(HTTP請求) :該屬性僅對HTTP請求產生作用,每次HTTP請求都會創建一個新的Bean,在請求完成以後,bean 會失效並被垃圾回收器回收。
4)、Session(會話) :該屬性僅用於HTTP Session,同一個Session共享一個Bean實例。不同Session使用不同的實例。在 session 過期後,bean 會隨之失效。
5)、global-session(全局會話) :該屬性僅用於HTTP Session,所有的Session共享一個Bean實例。

2、什麼是Spring inner beans

將這一個bean聲明爲另一個Bean的內部bean。內部bean可以用setter注入“屬性”和構造方法注入“構造參數”的方式來實現。無論何時此內部bean被使用,僅僅作爲被作爲一個屬性被調用。

3、什麼是有狀態、無狀態

單例:某個類系統範圍內只有一個實例
多例:某個類在系統範圍內同時有多個實例
無狀態類:類中沒有狀態信息,一般是無成員變量或成員變量的值是不變的。
有狀態類:類中有狀態信息,一般表現成員變量的值可變,在某一時該被調用而改變狀態,之後再調用時獲取其正確的狀態。

4、Spring框架中的單例Bean是線程安全的麼

單例模式確保某一個類只有一個實例,當多用戶同時請求一個服務時,容器會給每一個請求分配一個線程,這是多個線程會併發執行該請求多對應的成員方法,如果這個單例是無狀態的,那麼就是線程安全的,如果這個單例是有狀態的就不是線程安全的。
解決有狀態單例線程安全的措施: 對於有狀態的單例可以實現全局共享,狀態的修改最好加鎖,保證線程的安全性。

5、 Spring Bean 的自動裝配

1)、 首先用@Component註解類

@Component
Class public Student{

2)、 在啓動類上添加@ComponentScan註解的類, spring才能自動裝配bean

@ComponentScan 
Class public Application{

3)、 開啓默認掃描,spring將掃描由@Component註解的類,並且創建個實力

6、各種自動裝配模式的區別

1)、 no: 這是 Spring 框架的默認設置,在缺省情況下,自動配置是通過“ref”屬性手動設定。
2)、byName: 可以根據 bean 名稱設置依賴關係。當向一個 bean 中自動裝配一個屬性時,容器將根據 bean 的名稱自動在在配置文件中查詢一個匹配的 bean。
3)、byType: 可以根據 bean 類型設置依賴關係。當向一個 bean 中自動裝配一個屬性時,容器將根據 bean 的類型自動在在配置文件中查詢一個匹配的 bean。
4)、constructor: 在構造函數參數的byType方式。
**5)、autodetect:**如果找到默認的構造函數,使用“自動裝配用構造”; 否則,使用“按類型自動裝配”(在Spring3.0以後的版本此模式已被廢棄,已經不再合法了)。

7、在 Spring 中可以注入 null 或空字符串嗎

沒問題

8、Spring框架中有哪些不同類型的事件(都繼承自ApplicationContextEvent)

1)上下文更新事件(ContextRefreshedEvent): 當ApplicationContext初始化或刷新完成後觸發的事件。
2)上下文開始事件(ContextStartedEvent): 當ApplicationContext啓動後觸發的事件
3)上下文停止事件(ContextStoppedEvent): 當ApplicationContext停止後觸發的事件。
4)上下文關閉事件(ContextClosedEvent): 當ApplicationContext被關閉時觸發該事件。當容器被關閉時,其管理的所有單例Bean都被銷燬。
5)請求處理事件(RequestHandledEvent): 在Web應用中,當一個http請求(request)結束觸發該事件。

9、Spring 框架中都用到了哪些設計模型

1)代理模式: AOP就是基於動態代理的,把公共的代碼抽象出來,封裝到一個模塊中用於代理,便於減少系統的重複代碼,降低模塊間的耦合度,並有利於未來的可拓展性和可維護性。
2)單例模式: 在spring配置文件中定義的bean默認爲單例模式。
使用單例模式的好處:
(1)對於頻繁使用的對象,可以省略創建對象所花費的時間,減少系統的開銷;
(2)減少new操作的次數,系統內存使用率就會降低,這將減輕GC壓力,縮短GC停頓時間。
3)模板方法: 它定義了一系列操作的模型,子類繼承之後可以在模型 不變的情況下去實現自定義的操作。它可以用來解決代碼重複的問題。 Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 結尾的對數據庫操作的類,它們就使用到了模板模式。
4)適配器模式: 將一個接口轉換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作。Spring AOP 的實現是基於代理模式,但是 Spring AOP 的增強或通知(Advice)使用到了適配器模式,與之相關的接口是AdvisorAdapter。Advice 常用的類型有:BeforeAdvice(目標方法調用前,前置通知)、AfterAdvice(目標方法調用後,後置通知)、AfterReturningAdvice(目標方法執行結束後,return之前)。
5)裝飾器模式: 裝飾者模式可以動態地給對象添加一些額外的屬性或行爲。當我們需要修改原有的功能,但我們又不願直接去修改原有的代碼時,設計一個Decorator套在原有代碼外面。對於InputStream,ileInputStream 、BufferedInputStream都是對InputStream功能的擴展。
6)觀察者模式: 它表示的是一種對象與對象之間具有依賴關係,當一個對象發生改變的時候,這個對象所依賴的對象也會做出反應。Spring 事件驅動模型就是觀察者模式很經典的一個應用。
7)工廠模式: BeanFactory用來創建對象的實例。
8)委派模式: Spring 提供了 DispatcherServlet 來對請求進行分發。

10、FileSystemResource、 ClassPathResource 有何區別

ClassPathResource 在環境變量中讀取配置文件,FileSystemResource 在配置文件中讀取配置文件。

11、使用Spring框架的好處是什麼

1)輕量: Spring 是輕量的。
2)控制反轉: 在Spring中對象有 IOC容器創建,並且通過配置注入到配置變量中。Spring通過控制反轉實現了低耦合。
3)面向切面的編程(AOP): Spring支持面向切面的編程,並且把應用業務邏輯和系統服務分開。
4)容器(IOC): IOC可以創建、管理應用中對象、對象生命週期和對象之間的關係。
**5)MVC框架:**提供MVC框架,將控制邏輯代碼、數據存儲、試圖展示分層。
6)事務管理: Spring 提供一個持續的事務管理接口,封裝事物操作代碼。
7)異常處理: Spring可以全局捕捉異常。

12、Spring5 新特性

1) 支持JDK 8+和Java EE7+以上版本
2) 運行時兼容JDK9
3) 運行時兼容Java EE8 API
4) 反應式編程模型
5) 使用註解進行編程
6) 函數式編程
在這裏插入圖片描述
7) 提供專門的 HTTP/2 特性支持
8) 使用 Spring WebFlux 執行集成測試
9) 使用 JUnit 5 執行條件和併發測試
10) 支持Kotlin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章