java - Spring 测试/生产应用程序上下文

标签 java spring

为什么当使用 @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/

相关文章:

java - RSA加解密: BadPaddingException : Data must start with zero

java - Spark on YARN - 任务运行速度非常慢

java - 我想从 MongoDB 中的列表介绍 hashmap 获取数据 - Java

java - 如何在 Java 的实现类中的抽象类中实现抽象类?

java - 在 Spring Boot 应用程序之间传递文件/流

java - Spring存储库findBy join表

java - Spring Boot - 禁用验证日志

java - Android - 图像裁剪未加载图像

java - Spring - 切换要使用的SchedulerFactoryBean

java - Spring(-Boot) Autowiring 在裸初始化项目中始终为空