SpringCore-我可以使用@ContextConfiguration在主类中加载bean,而不是创建ApplicationContext obj来加载bean吗?
我在Spring doc上读到了这个声明 @ContextConfiguration定义类级元数据,用于确定如何为集成测试加载和配置ApplicationContext。SpringCore-我可以使用@ContextConfiguration在主类中加载bean,而不是创建ApplicationContext obj来加载bean吗?,spring,dependency-injection,applicationcontext,Spring,Dependency Injection,Applicationcontext,我在Spring doc上读到了这个声明 @ContextConfiguration定义类级元数据,用于确定如何为集成测试加载和配置ApplicationContext。 具体来说,@ContextConfiguration声明将用于加载上下文的应用程序上下文资源位置或带注释的类 然后,我尝试通过将@ContextConfiguration放在类的顶部来加载主类(不是测试类)中的应用程序上下文,但是Spring无法加载bean定义 AppJavaBasedConfig @Configuratio
具体来说,@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定义。顺便说一句,在这种情况下,也许你最后关于这个注释功能的评论应该考虑在内。