我是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>
答案 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...
}
}