2013-10-03 171 views
-2

請回答以下問題。春季的一些問題

1)裝載的bean在哪裏。將他們加載在Spring ApplicationContext中?
或者它們被ApplicationContext加載到堆中。
2)在Spring Web應用程序中,如果應用程序未被使用一天左右,ApplicationContext對象垃圾是否會被收集?

3)如何使singletons線程安全?
4)Spring中有哪些Threadsafe問題的其他對象。
5)BeanPostProcessor的方法爲應用程序中的每個bean執行。
如何處理複雜應用程序中的數千個對象。
beanpostProcessors是否線程安全?

+0

拆分和細化的問題,請。 – vertti

回答

1

我認爲你應該更好地分解這些問題 - 他們每個人都值得專注線程imho。

  1. 在任何情況下,Spring會爲您加載bean。怎麼樣?它讀取有關這些bean的元數據(基於xml/annotations),並將它們連接在一起。所以春天爲你做了一個「新」,但是如何訪問這個bean?這裏ApplicationContext來玩。就像所有這些bean的容器一樣,容器允許通過名稱訪問bean實例(getBean(「beanName」))。 在一個非常簡單的方法中,您可以將應用程序上下文視爲按名稱排列的bean映射。 我並沒有完全理解這裏的「堆」問題。 Spring bean只是生活在JVM中的Java對象,所以是的,基本上它們被加載到堆中。唯一的區別是它們是由spring而不是由你的代碼加載的。

  2. 應用程序上下文不會被垃圾回收,因爲它存儲在整個Web應用程序中(並且可以訪問)。 當然,由這個應用程序上下文創建的bean可以被垃圾收集,如果它們不是單例或什麼的話。我知道它是一個模糊的答案,隨時可以改進你的問題。

  3. 單核在其核心架構中與線程安全無關。是的,spring提供了一個'singleton'bean範圍。這意味着每次你執行getBean調用時,你都會得到相同的實例,所以它是一個單例(只要你在春天管理這個bean)。這個定義並不影響bean的設計,所以如果你通過調用它的構造函數(new關鍵字)來創建這個類的一個實例,那麼你會得到一個完全不同的這種類型的對象,彈簧。 重要的是瞭解Spring作爲框架的責任何時開始以及何時結束:) 因此,如果您希望單身人士成爲線程安全的,則應將其設計爲線程安全。 最好的會做它無國籍,但它又與春天無關,所以請問它在不同的線程,或只是谷歌的「線程安全設計」

  4. 真的不明白問題,所以我不能回答,對不起:(

  5. 豆再次處理器的線程安全性取決於實際寫在那裏,它的代碼在那裏,而不是基礎結構代碼。

希望這有助於