我有2個spring上下文:「webapplication」上下文和「core」上下文。上下文「核心」在服務器啓動時被初始化並連接到一個持有上下文的Singleton類。當web應用程序啓動時,「webapplication」上下文被初始化。Web應用上下文和服務上下文之間的雙向依賴關係
我想從一個上下文中的Bean注入Bean依賴關係到另一個上下文(雙向訪問)。 Web應用程序bean將成爲「會話」範圍的bean。
我正在測試這個概念驗證:webapp bean - >(取決於)核心bean - >(取決於另一個)webapp bean。
在web應用程序上下文初始化中,我可以將「核心」bean注入到「web應用程序」bean(一個BeanFactory,它支持單例做魔術),但無法弄清楚如何做相反的事情;因爲包含WebApplicationContext的Spring ThreadLocal尚未初始化。
問題是。這是我想要做的事嗎?如果答案是「是」,你會怎麼做?
提前致謝。
編輯:
我已經意識到我做錯了。事實是,我想在錯誤的時間向服務層注入一個依賴於會話bean的依賴;也就是說,在我沒有當前用戶會話的網絡初始化時間。
我的業務邏輯依賴於會話數據,因爲我需要(示例)在發送一些信息到後端層之前從服務bean內部訪問/處理購物車bean(具有會話範圍)。單例模式在許多體系結構中都是常見的做法,我們的單例模式持有ApplicationContext(不是類加載器)。爲什麼你說這是一個糟糕的設計實踐? – 2012-07-25 17:39:52
@andresoviedo:謝謝澄清。您的業務邏輯不是從Web層調用的嗎?如果是這種情況,只需在web圖層中閱讀購物車並將其明確地作爲參數傳遞即可。關於單例 - 在單例的靜態字段中保留對「ApplicationContext」的引用(單例具有類加載器作用域,這就是我的意思)只是醜陋的,Spring提供了更好的機制。上下文繼承(如前面提到的Spring MVC)。更不用說那個單身人士本身有時被稱爲*反模式*。 – 2012-07-25 17:50:59
謝謝。 Mi業務邏輯是從Web層調用的。我已經考慮過將Web bean作爲參數傳遞給服務層,但我想使用注入有作用域的會話Bean來簡化組件的佈線。 – 2012-07-25 18:39:45