我有一個具體的要求,我應該動態地(在運行時)能夠加載和卸載我的Spring IoC容器中的bean類。如何使用類加載器實例化spring bean?
一個bean必須
- 創建
- 破壞
- 重新創建(同一類,同一類的可能的新版本)
我是問題面對的是,因爲第1步中的類被加載到系統類加載器中,所以即使在我銷燬bean時它仍然存在。所以在第三步中,我得到了舊班級的一個對象,而不是新班級。
所以我的問題的解決方案是加載類MyClassLoader而不是系統類加載器。
所以我的步驟變得
- 創建特定的類加載器
- 使用特定的類加載器
- 設置bean的引用爲null,從AppContext
- 設置的類加載器的參考,除去豆創建bean null
使用步驟1和2重新加載bean
我的問題是如何在Spring IoC容器中實現上述方法?
感謝,
問候,
VIMAL
你可以用新的類加載器重新創建spring上下文嗎?請記住,重新創建bean不會將它重新注入到現有的bean中,而只要它被引用。還記得父類加載器總是優先於後代。 – mrembisz 2012-03-26 09:20:54
@mrembisz嗨,似乎是一個好主意,在新的類加載器中創建AppContext本身。我會試一試。但是在新的類加載器中創建一個AppContext將確保這個上下文中的所有bean也被加載到同一個類加載器中? – weima 2012-03-26 09:24:18
你應該調用context.setClassLoader(classLoader)來確保。你也想重載的類在classLoader的父類中不可用。 – mrembisz 2012-03-26 10:25:55