[英]Spring test/production application context
為什么在使用@ContextConfiguration運行spring測試時(...)@Autowired會自動運行,並且在運行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
,依賴項將被注入的類都需要由Spring管理。
測試:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
由Spring管理。 當注釋不存在時,該類不由Spring管理,因此不執行依賴注入
您期望Spring能夠將bean注入其無法管理的實例中。
您手動創建對象
FinalTest finalTest = new FinalTest();
Spring只能將bean注入它管理的對象中。 這里,Spring與上面創建的對象無關。
在您的上下文中聲明一個FinalTest
bean並檢索它。 如果您的配置正確,它將自動裝配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.