2009-07-10 53 views
9

我有一個FileSystemXmlApplicationContext,我想在XML中定義的豆子採取的構造函數的參數未在春天宣佈豆如何在從文件加載之前將Bean注入到ApplicationContext中?

例如,我想這樣做:

<bean class="some.MyClass"> 
    <constructor-arg ref="myBean" /> 
</bean> 

所以,我能想象通過像這樣:

Object myBean = ... 
context = new FileSystemXmlApplicationContext(xmlFile); 
context.addBean("myBean", myBean); //add myBean before processing 
context.refresh(); 

除了沒有這樣的方法:-(沒有人知道我可以做到這一點

回答

15

如何通過編程方式首先創建一個空的父上下文,使用getBeanFactory返回SingletonBeanRegistry實現的事實將對象註冊爲具有該上下文BeanFactory的單例。

parentContext = new ClassPathXmlApplicationContext(); 
parentContext.refresh(); //THIS IS REQUIRED 
parentContext.getBeanFactory().registerSingleton("myBean", myBean) 

然後將此上下文指定爲「真實」上下文的父項子上下文中的bean然後將能夠引用父項中的bean。

String[] fs = new String[] { "/path/to/myfile.xml" } 
appContext = new FileSystemXmlApplicationContext(fs, parentContext); 
+0

我會檢查並給予好評您! (只是讓代碼編譯:-) – 2009-07-10 15:48:19

1

正如我遇到了麻煩與AnnotationConfigApplicationContext解決這個,我發現了以下選擇:

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory(); 
beanFactory.registerSingleton("customBean", new CustomBean()); 
context = new AnnotationConfigApplicationContext(beanFactory); 
context.register(ContextConfiguration.class); 
context.refresh(); 
相關問題