Spring共享上下文機制

2021-08-23 15:11:53 字數 1559 閱讀 2722

對於spring應用程式上下文的引用基本有兩種形式,一種就是通過實現spring提供的aware介面來得到spring容器的應用程式上下文,第二種就是使用[i][b]contextsingletonbeanfactorylocator[/b][/i]來獲得spring應用程式上下文。

第一種情況就不用多說了,這裡主要介紹第二種得到spring應用程式上下文的方法。

在有些應用場景中,沒有辦法通過使用spring的aware介面將其上下文注入到需要使用spring上下文的類中。這種情況一般發生在某個應用程式需要執行在特定容器中的情況,比如web容器或者ejb容器。對於web容器來說,spring與現有的大多數流行mvc容器整合都很好,但是對於ejb容器就沒有辦法將spring應用程式上下文的引用傳遞給新建立的ejb。也就是說spring與現有的ejb容器的整合不是太好。

當然,可以讓每個新建立的ejb都擁有乙份spring應用程式上下文的拷貝,但是這種方式在有的時候會引起效能上的很大消耗。比如spring應用程式上下文包含相當多的bean定義,或者包含初始化代價很高的bean(hibernate session)。所以spring提供了另外一種機制也就是共享上下文機制。

通過spring提供的[i][b]contextsingletonbeanfactorylocator[/b][/i]或者[i][b]singletonbeanfactorylocator[/b][/i]來獲得spring應用程式上下文。這種方式下,spring會快取乙個應用程式上下文的單例來提供給不同的呼叫者。

使用這種方式需要增加乙個spring的配置檔案,該檔案的預設名字為beanrefcontext.xml,內容大致如下:

有了這個檔案就可以使用下面的**來獲得spring應用程式上下文的引用:

beanfactorylocator locator = contextsingletonbeanfactorylocator.getinstance();

beanfactoryreference bfr = locator.usebeanfactory("servicelayer-context");

//通過factory的getbean方法獲得想要的bean....

beanfactory factory = bfr.getfactory();

bfr.release();

上面**段的第一行**就會讀取預設的beanrefcontext.xml配置檔案(位於classpath的根目錄下),第二行**指定了使用該配置檔案中的那個bean作為beanfacotry,第三行**則是用來獲得真正的beanfactory。

如果在別的容器中需要使用spring的應用程式上下文,但是又沒有辦法用其他方式來獲得其上下文的時候可以採用這種方式。另外乙個用處就是可以通過這種方式定義共享的spring應用程式上下文。例如在乙個j2ee ear中可能有幾個war,每個war中使用的底層service都一樣,那就可以用spring來管理service之間依賴和初始化工作,然後通過上述方式共享spring應用程式上下文。

這種方式還可以實現用spring來維護乙個或者多有由不同bean構成的元件,通過上面的方式來使用其中的元件。

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...

全域性上下文與上下文

全域性上下文由main函式載入系統的主架構和主事件迴圈和全域性資料構成。是上帝創造世界時,建立的基礎事物。萬物之始,大道至簡,衍化至繁。全域性上下文代表著程式執行所需要的基礎資源。是程式執行的基礎。全域性上下文的特徵是在程式執行期間常駐記憶體。全域性上下文的生命週期和應用程式的生命週期相同。與應用程...