春天 - 豆没有注射

时间:2014-08-01 17:53:20

标签: java spring dependency-injection

我是Spring的新手,我不完全了解如何设置bean注入。

我有一个班级:

public class AClass {

    @Autowired
    private Class1 class1;
    @Autowired
    private Class2 class2;
    @Autowired
    private Class3 class3;

    public setClass1(Class1 class1) {
        this.class1 = class1;
    }

    public setClass2(Class2 class2) {
        this.class1 = class1;
    }

    public setClass3(Class3 class3) {
        this.class1 = class1;
    }

    public void doAThing() {
        class1.doSomething();
        class2.doSomething();
        class3.doSomething();
    }
}

我对这个课程进行了测试:

public class AClassTest {
    @Test
    public void test() {
        AClass obj = new AClass();
        obj.doAThing();
    }
}

创建@Autowired实例后,没有设置AClass个实例。显然,我在使用Spring时遇到了一些问题,我想知道需要做些什么才能使其正常工作。

(顺便说一句,我正在使用代码库工作,在后台设置Spring配置,所以我不需要初始化任何配置,因为这是为我完成的)

这是我的bean xml文件:

<beans ...xml config crap...>

    ...other beans that work for other classes...

    <bean id="class1var" class="apackage.Class1Var" />

    <bean id="class1" class="apackage.Class1">
        <property name="class1var" ref="class1var" />
    </bean>

    <bean id="class2var" class="apackage.Class2Var" factory-method="getInstance" />

    <bean id="class2" class="apackage.Class2">
        <property name="class2var" ref="class2var" />
    </bean>

    <bean id="class3" class="apackage.Class3">
        <property name="class3var" ref="class3var" />
        <!--class3var is defined in another file-->
    </bean>

</beans>

1 个答案:

答案 0 :(得分:1)

您手动创建bean。这就是为什么Spring没有注入豆子的原因。

相反,通过在测试中添加SpringJUnit4ClassRunner来使用@RunWith(SpringJUnit4ClassRunner.class)类执行测试,并使用@ContextConfiguration发出配置信号。另外,将bean注入单元测试中。您的测试应该如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
    "/package/where/your/xml/config/files/are/located/spring-config.xml"
    })
public class FooTest {
    //now Spring handles its creation and bean injection
    @Autowired
    AClass aClass;

    public void foo() {
        aClass.doAThing();
        //further code for your test...
    }
}