2012-03-27 89 views
0
class AbstractBeanFactory 

    public void setParentBeanFactory(BeanFactory parentBeanFactory) { 
    if (this.parentBeanFactory != null && this.parentBeanFactory != parentBeanFactory) { 
     throw new IllegalStateException("Already associated with parent BeanFactory: " + this.parentBeanFactory); 
    } 
    this.parentBeanFactory = parentBeanFactory; 
} 

我的要求是用一個AppContext引用另一個AppContext作爲它的父對象來創建一個ApplicationContext鏈。親子關係也延伸到AppContext的相應DefaultListableBeanFactory,即上下文的DefaultListableBeanFactory將父親上下文的DefaultListableBeanFactory作爲其父親。 這樣做是爲了讓位於鏈中任何Context的bean都可以從最底層的AppContext中搜索到。Java:spring:爲什麼AbstractBeanFactory不允許更改父BeanFactory?

這個鏈是動態的,新的AppContext被添加在頂部,任何AppContext都可以從中間被刪除。

但是,當我從中間刪除一個AppContext並嘗試更改DefaultListableBeanFactory父關係時,它給出了上述例外。

如何在運行時更改工廠的父關係?

感謝, 問候, VIMAL

回答

1

我相信父bean工廠設計爲最終的,這是合理的設計選擇在我看來。用另一個替換會導致許多不一致和不可預測的行爲。

如果你依賴於從父上下文注入的bean,如果你替換父上下文會發生什麼?這種依賴性應該重新注入嗎?如果是的話,原型豆怎麼樣,他們沒有跟蹤?如果不是,如果來自父上下文的bean的範圍發生變化呢?

Spring不允許部分刷新上下文,並且替換父上下文聽起來像是嘗試這樣的操作。

也許如果你通過一些例子更詳細地解釋了你的問題,可以用一個建設性的建議來回答你的問題。

+0

我已經解釋了另一個問題的問題http://stackoverflow.com/questions/9885350/java-spring-how-to-transfer-beans-from-one-classpathxmlapplicationcontext-to-a – weima 2012-03-27 07:50:23