這是一個非常基本的問題,但我需要幫助。假設我們在spring中創建一個singleton bean,那麼Spring的ioc會創建該特定bean的單個實例,並且當某種代碼需要它注入時,這很好。但我很困惑它將如何由多線程環境來管理。就像我們在spring中將sesssionFactory bean作爲單例一樣,然後向需要sessionFactory bean的特定休息url發出很多請求。 Spring框架如何將bean的單個實例提供給那麼多請求。SessionFactory實例如何在(Spring MVC)Web請求中處理?
3
A
回答
4
你在談論持久性提供者會話工廠,例如, Hibernate SessionFactory?
對於每個DataSource,這個工廠應該存在一次,因爲創建(連接處理,內存消耗)不是很便宜,並且應該在整個應用程序生命週期中重用,所以單點就是在這一點上的方法。工廠是不可變的(線程安全的),並且不會有併發問題。
每個傳入的線程(由web請求創建)應該重用該工廠來創建它自己的會話,無論訪問多長時間(例如存儲在線程局部變量中),該會話都應該用於該線程。
E.g.如果我們現在將抽象層升級到JPA級別,則JPA EntityManagerFactory正在包裝Hibernate SessionFactory,如果您想將JPA掛件用於休眠會話 - EntityManager - 並且您希望讓Spring管理它,您將獲得一個EntityManager的代理這樣的:
@PersistenceContext
private EntityManager entityManager;
這將提供了EntityManager代理(包裹會議)當前線程對您的業務代碼。
同樣是有效的抽象的一個新的水平,如果你使用Spring Data JPA,它的資料庫和@Transactional
方法。在這種情況下,Spring也會爲你處理。
相關問題
- 1. 如何在CherryPy中處理Web請求?
- 2. 如何在Spring MVC中忽略JSON處理請求?
- 3. Spring MVC請求正文錯誤處理
- 4. 使用Spring MVC處理請求
- 5. Spring MVC請求處理失敗
- 6. Spring MVC-異步請求處理
- 7. 如何在Spring MVC中爲請求,響應和實體處理DTO
- 8. 如何處理Spring MVC中的Ajax請求?
- 9. Spring MVC在沒有請求映射時如何處理異常?
- 10. Web請求超時處理?
- 11. Spring MVC:如何獲得處理方法的請求
- 12. Spring MVC控制器如何處理多個長的http請求?
- 13. 用spring處理ajax請求
- 14. 如何處理ASP.net MVC請求?
- 15. IIS如何處理ASP.net MVC請求?
- 16. 如何在Spring中定義多個sessionfactory實例?
- 17. 在Main中處理Web請求?
- 18. 區分應用程序處理程序中的Web API請求和MVC請求
- 19. MVC控制器和Web Flow Controller - 請求處理優先級
- 20. Spring Web MVC Post請求多個對象
- 21. 處理ASP.NET MVC中的異步請求
- 22. 如何處理JSON並在Spring Interceptor中修改請求?
- 23. 如何在Spring的SessionFactory
- 24. 請求URL「HelloWorld」如何在ASP.Net MVC中實例化HelloWorldController對象?
- 25. 如何在Spring社交中執行Facebook批處理請求處理
- 26. 在Spring MVC中處理cookie
- 27. 如何在MVC應用程序中處理長請求
- 28. 如何在PHP中使用MVC處理Ajax請求
- 29. 如何在Heroku中處理長時間的Web請求?
- 30. 如何在ASP.Net中處理Web服務請求
是否每個Web請求都創建一個新線程? –
是的,每個請求都是一個單獨的線程。 –
謝謝你。你解釋得很好。現在我明白了SessionFactory如何用作單例bean。但我也想知道,在併發web請求時如何使用singleton bean(由@Component註釋生成)? –