1. 您的位置 首頁 技術

        2020全新Java面試題——Spring(二)

        一、spring 中的 bean 是線程安全的嗎? (相關推薦:java面試題) Spring容器中的Bean是否線程安全,容器本身并沒有提供Bean的線程安全策略,因此可以說sp…

        一、spring 中的 bean 是線程安全的嗎?

        (相關推薦:java面試題)

        Spring容器中的Bean是否線程安全,容器本身并沒有提供Bean的線程安全策略,因此可以說spring容器中的Bean本身不具備線程安全的特性,但是具體還是要結合具體scope的Bean去研究。

        二、spring 支持幾種 bean 的作用域?

        當通過spring容器創建一個Bean實例時,不僅可以完成Bean實例的實例化,還可以為Bean指定特定的作用域。Spring支持如下5種作用域:

        singleton:單例模式,在整個Spring IoC容器中,使用singleton定義的Bean將只有一個實例

        prototype:原型模式,每次通過容器的getBean方法獲取prototype定義的Bean時,都將產生一個新的Bean實例

        request:對于每次HTTP請求,使用request定義的Bean都將產生一個新實例,即每次HTTP請求將會產生不同的Bean實例。只有在Web應用中使用Spring時,該作用域才有效

        session:對于每次HTTP Session,使用session定義的Bean豆漿產生一個新實例。同樣只有在Web應用中使用Spring時,該作用域才有效

        globalsession:每個全局的HTTP Session,使用session定義的Bean都將產生一個新實例。典型情況下,僅在使用portlet context的時候有效。同樣只有在Web應用中使用Spring時,該作用域才有效

        其中比較常用的是singleton和prototype兩種作用域。對于singleton作用域的Bean,每次請求該Bean都將獲得相同的實例。容器負責跟蹤Bean實例的狀態,負責維護Bean實例的生命周期行為;

        如果一個Bean被設置成prototype作用域,程序每次請求該id的Bean,Spring都會新建一個Bean實例,然后返回給程序。在這種情況下,Spring容器僅僅使用new 關鍵字創建Bean實例,一旦創建成功,容器不在跟蹤實例,也不會維護Bean實例的狀態。

        如果不指定Bean的作用域,Spring默認使用singleton作用域。

        Java在創建Java實例時,需要進行內存申請;銷毀實例時,需要完成垃圾回收,這些工作都會導致系統開銷的增加。因此,prototype作用域Bean的創建、銷毀代價比較大。而singleton作用域的Bean實例一旦創建成功,可以重復使用。

        因此,除非必要,否則盡量避免將Bean被設置成prototype作用域。

        三、spring 自動裝配 bean 有哪些方式?

        Spring容器負責創建應用程序中的bean同時通過ID來協調這些對象之間的關系。作為開發人員,我們需要告訴Spring要創建哪些bean并且如何將其裝配到一起。

        spring中bean裝配有兩種方式:

        1、隱式的bean發現機制和自動裝配

        2、在java代碼或者XML中進行顯示配置

        當然這些方式也可以配合使用。

        四、spring 事務實現方式有哪些?

        編程式事務管理對基于 POJO 的應用來說是唯一選擇。我們需要在代碼中調用beginTransaction()、commit()、rollback()等事務管理相關的方法,這就是編程式事務管理。

        基于 TransactionProxyFactoryBean 的聲明式事務管理

        基于 @Transactional 的聲明式事務管理

        基于 Aspectj AOP 配置事務

        五、說一下 spring 的事務隔離?

        事務隔離級別指的是一個事務對數據的修改與另一個并行的事務的隔離程度,當多個事務同時訪問相同數據時,如果沒有采取必要的隔離機制,就可能發生以下問題:

        臟讀:一個事務讀到另一個事務未提交的更新數據。

        幻讀:例如第一個事務對一個表中的數據進行了修改,比如這種修改涉及到表中的“全部數據行”。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入“一行新數據”。

        那么,以后就會發生操作第一個事務的用戶發現表中還存在沒有修改的數據行,就好象發生了幻覺一樣。

        不可重復讀:比方說在同一個事務中先后執行兩條一模一樣的select語句,期間在此次事務中沒有執行過任何DDL語句,但先后得到的結果不一致,這就是不可重復讀。

        以上就是2020全新Java面試題——Spring(二)的詳細內容,更多請關注24課堂在線網其它相關文章!

        本文來自網絡,不代表24小時課堂在線立場,轉載請注明出處:http://www.rw-tm.com/88298.html

        為您推薦

        返回頂部
        欧美人牲交免费观看