为什么当使用 @ContextConfiguration(...) @Autowired 运行 spring 测试时会自动工作,而在运行 Java 应用程序时我会得到 NullPointerException?
通过以下示例,我得到 NullPointerException:
public class FinalTest {
@Autowired
private App app;
public FinalTest() {
}
public App getApp() {
return app;
}
public void setApp(App app) {
this.app = app;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
FinalTest finalTest = new FinalTest();
finalTest.getApp().getCar().print();
finalTest.getApp().getCar().getWheel().print();
}
}
通过以下示例,它可以工作:
public class FinalTest {
private App app;
public FinalTest() {
}
public App getApp() {
return app;
}
public void setApp(App app) {
this.app = app;
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
FinalTest finalTest = new FinalTest();
finalTest.setApp((App)context.getBean("app"));
finalTest.getApp().getCar().print();
finalTest.getApp().getCar().getWheel().print();
}
}
在测试中不需要执行 context.getBean(),它只需与 @Autowired 一起使用:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
public class AppTest{
@Autowired
private App app;
@Test
public void test(){
assertEquals("This is a SEAT_test car.", this.app.getCar().toString());
assertEquals("This is a 10_test wheel.", this.app.getCar().getWheel().toString());
}
}
谢谢。
最佳答案
任何时候使用@Autowired
,要注入(inject)依赖的类都需要由Spring管理。
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
由 Spring 管理。当注解不存在时,该类不受Spring管理,因此不存在 执行依赖注入(inject)
关于java - Spring 测试/生产应用程序上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23314294/