簡體   English   中英

Spring測試/生產應用程序上下文

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM