Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SpringCore-我可以使用@ContextConfiguration在主类中加载bean,而不是创建ApplicationContext obj来加载bean吗?_Spring_Dependency Injection_Applicationcontext - Fatal编程技术网

SpringCore-我可以使用@ContextConfiguration在主类中加载bean,而不是创建ApplicationContext obj来加载bean吗?

SpringCore-我可以使用@ContextConfiguration在主类中加载bean,而不是创建ApplicationContext obj来加载bean吗?,spring,dependency-injection,applicationcontext,Spring,Dependency Injection,Applicationcontext,我在Spring doc上读到了这个声明 @ContextConfiguration定义类级元数据,用于确定如何为集成测试加载和配置ApplicationContext。 具体来说,@ContextConfiguration声明将用于加载上下文的应用程序上下文资源位置或带注释的类 然后,我尝试通过将@ContextConfiguration放在类的顶部来加载主类(不是测试类)中的应用程序上下文,但是Spring无法加载bean定义 AppJavaBasedConfig @Configuratio

我在Spring doc上读到了这个声明

@ContextConfiguration定义类级元数据,用于确定如何为集成测试加载和配置ApplicationContext。
具体来说,@ContextConfiguration声明将用于加载上下文的应用程序上下文资源位置或带注释的类

然后,我尝试通过将@ContextConfiguration放在类的顶部来加载主类(不是测试类)中的应用程序上下文,但是Spring无法加载bean定义

AppJavaBasedConfig

@Configuration
public class AppJavaBasedConfig {

    @Bean
    public IStringUtil stringUtil() {
        return new StringUtil();
    }

    @Bean
    public App app() {
        return new App();
    }
}
Main

@ContextConfiguration(classes=AppJavaBasedConfig.class)
public class App {

    @Autowired
    private IStringUtil stringUtil;

    public static void main(String[] args) {
        // ApplicationContext context = new AnnotationConfigApplicationContext(AppJavaBasedConfig.class);
        // App app = context.getBean(App.class);
        App app = new App();
        app.stringUtil.lower("AAA");
    }
}
它抛出NullPointerException


那么,我们可以在main类中使用此注释吗?

如果您需要在App.java中使用IStringUtil stringUtil并测试一些东西,您可以使用@Bean的@PostContract或init method属性在Bean的生命周期中被调用:

@Component
public class App {

    @Autowired
    private IStringUtil stringUtil;

    @PostConstruct
    public void init() {

        stringUtil.lower("AAA");
    }
}

如果您需要在App.java中使用IStringUtil stringUtil并进行测试,您可以使用@Bean的@PostContract或init method属性在Bean的生命周期中调用:

@Component
public class App {

    @Autowired
    private IStringUtil stringUtil;

    @PostConstruct
    public void init() {

        stringUtil.lower("AAA");
    }
}

简而言之,答案是否定的。这是一个概念问题。 Spring可以加载所有带有@Configuration注释的bean;但是谁会实例化/启动spring容器呢

因为您有
publicstaticvoidmain
我假设最终产品是jar,它将作为
java-jar
在命令行上运行

当您尝试执行
java-jar
时,执行的方法是
publicstaticvoidmain
(前提是您正确地拥有所有清单),您应该做的第一件事是根据您的问题实例化spring容器crtl+c

public static void main(String[] args) {
     ApplicationContext context = new AnnotationConfigApplicationContext(AppJavaBasedConfig.class);
     App app = context.getBean(App.class);

}

如果你不想做所有这些,你可以利用

简短的回答是不。这是一个概念性的问题。 Spring可以加载所有带有@Configuration注释的bean;但是谁会实例化/启动spring容器呢

因为您有
publicstaticvoidmain
我假设最终产品是jar,它将作为
java-jar
在命令行上运行

当您尝试执行
java-jar
时,执行的方法是
publicstaticvoidmain
(前提是您正确地拥有所有清单),您应该做的第一件事是根据您的问题实例化spring容器crtl+c

public static void main(String[] args) {
     ApplicationContext context = new AnnotationConfigApplicationContext(AppJavaBasedConfig.class);
     App app = context.getBean(App.class);

}

如果您不想做所有这些,您可以使用

@ContextConfiguration用于在集成测试中加载上下文。除了刻板印象,你不应该在任何地方使用它annotations@ContextConfiguration用于在集成测试中加载上下文。您不应该在任何地方使用它,除了原型注释感谢您的快速代表,但是[test something]不是我的目标,我真的想加载bean定义。顺便说一句,在这种情况下,也许你最后一次对这个注释的功能的评论应该考虑在内。谢谢你的快速回复,但是[test something]不是我的目标,我真的很想加载bean定义。顺便说一句,在这种情况下,也许你最后关于这个注释功能的评论应该考虑在内。