Java 那么为什么我的bean是空的呢?

Java 那么为什么我的bean是空的呢?,java,spring,dependency-injection,Java,Spring,Dependency Injection,我最近询问了从applicationContext中提取bean的问题。答案确实很有帮助,但现在看来我在从测试之外的类访问这个bean时遇到了问题。换句话说,我的测试实例化了一个类,该类使用来自应用程序上下文的bean,但这个bean总是出现空值 我的测试设置应用程序上下文如下: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "/applicationContext-test.xml") pub

我最近询问了从applicationContext中提取bean的问题。答案确实很有帮助,但现在看来我在从测试之外的类访问这个bean时遇到了问题。换句话说,我的测试实例化了一个类,该类使用来自应用程序上下文的bean,但这个bean总是出现空值

我的测试设置应用程序上下文如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class SearcherTests {
我的测试以编程方式实例化存储库类:

    Repository searcher = new Repository();
My Repository类具有以下成员变量:

 @Resource
 private MyFactory myFactory;
如果我正确理解Spring,那么应该在当前应用程序上下文中查找名为
myFactory
的bean。根据测试,当前应用程序上下文应该是
applicationContext test.xml
,它包含
myFactory
的定义:

 <bean id="myFactory" 
    name="myFactory" 
    class="com.foo.Mocks"
    factory-method="createMockFactory" />
当我从浏览器运行应用程序时,
myFactory
变量已从
applicationContext.xml
中的bean定义中正确实例化。在我的测试中,为了确保我的
applicationContext test.xml
工作正常,我将这个bean作为成员变量列出,就像我在
存储库
类中所做的一样。运行测试时,包含测试的文件中的
myFactory
变量看起来与我期望的完全一样。但是,当我到达
存储库
类时,该类中的
myFactory
变量为null。这个类似乎没有根据
applicationContext test.xml
中的bean定义实例化
myFactory
变量。有人能告诉我为什么吗

更新


我更改了
searcher
变量,使其成为Springbean,而不是手动实例化
Repository
类,现在
myFactory
变量已填充到
Repository
类中。有人能解释一下为什么这需要一个bean才能工作吗?

如果您自己实例化
存储库,那么Spring就不会参与,依赖关系也不会被注入。它不是神奇地发生的,Spring必须以某种方式在循环中-实例必须通过Spring处理层传递,而直接实例化可以防止这种情况发生。

它如何获得
存储库
?它是SpringBean吗?不,存储库不是SpringBean。我的测试实际上实例化了一个类,而这个类又实例化了存储库类。所有这些实例化都是以编程方式完成的。我将存储库更改为Springbean,现在可以使用了。不知道为什么它需要一个bean才能工作。如果这个类直接在应用程序代码中实例化,那么依赖关系就可以很好地被注入。我所知道的这两种场景之间的唯一区别是,当应用程序运行时,applicationContext由web.xml加载。然而,我对Spring还不熟悉,所以可能还有其他一些我不知道的差异。如果你能澄清这一点,我将不胜感激,因为我想更好地理解Spring。
public class Mocks {

 public static MyFactory createMockFactory() {
  return new MyFactory();
 }
}