我最近问过
this question
关于从应用程序上下文中提取bean。答案确实很有帮助,但现在看来我在从测试之外的类访问这个bean时遇到了问题。换句话说,我的测试实例化了一个类,该类使用来自应用程序上下文的bean,但是这个bean一直为空。
我的测试设置应用程序上下文如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class SearcherTests {
我的测试以编程方式实例化存储库类:
Repository searcher = new Repository();
我的知识库类具有以下成员变量:
@Resource
private MyFactory myFactory;
如果我正确理解Spring,那么应该查找名为
myFactory
. 根据测试,当前应用程序上下文应该是
applicationContext-test.xml
,其中包含
肌厂
:
<bean id="myFactory"
name="myFactory"
class="com.foo.Mocks"
factory-method="createMockFactory" />
将来,此工厂方法将返回模拟。但目前,它只返回
Factory
对象:
public class Mocks {
public static MyFactory createMockFactory() {
return new MyFactory();
}
}
当我从浏览器运行应用程序时,
肌厂
变量是根据中的bean定义正确实例化的。
applicationContext.xml
. 在我的测试中,确保
应用程序上下文-test.xml
正在工作,我将这个bean作为一个成员变量列出,就像在
Repository
班级。在运行测试时,
肌厂
包含测试的文件中的变量与我预期的完全相同。但是,当我到达
知识库
类
肌厂
该类中的变量为空。似乎这个类没有实例化
肌厂
基于中bean定义的变量
应用程序上下文-test.xml
. 有人能告诉我为什么吗?
更新
我改变了
searcher
变量,以便它是一个SpringBean,而不是实例化
知识库
手动类,现在
肌厂
变量已填充到
知识库
班级。有人能解释为什么这需要是一个bean才能工作吗?