Spring中是否自动实例化了ApplicationContext?

Is ApplicationContext automatically instantiated in Spring?

ApplicationContext是否在Spring中自动实例化?

如果我这样定义我的 bean

@Component
public class Car{
   ...
}

然后我有我的配置 class 它告诉 Spring 容器通过注解 @ComponentScan

在哪里寻找 bean
@Configuration
@ComponentScan
public class AppConfig {
   ...
}

Spring 是否会自动创建一个加载我所有 bean 的上下文?还是我必须以编程方式创建它?如果是这样,我该怎么做,像这样?

@Configuration
@ComponentScan
public class AppConfig {
   ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
   context.getBean(Car.class);
   ...
}

即使这样做,也可能会出现问题,因为每次我需要上下文时,我都必须调用新的 AnnotationConfigApplicationContext... 推荐的实例化上下文并使他在整个项目中可用的方法是什么,可能像在 Spring 启动应用程序中一样作为一个 bean,我可以在其中自动装配它。

Boot 如何 Spring 初始化它,加载所有 bean 并让上下文作为 bean 可用,准备好自动装配?

,如果您有一个简单且基本的 Spring Core 应用程序,应用程序上下文不会自动实例化。此外,您的 @Configuration class 不会扫描任何内容,也不会创建任何 bean,如果您不使用 @Configuration class.

有多种创建应用程序上下文的方法,但最流行和传统的方法是:

  • ApplicationContext context = new ClassPathXmlApplicationContext(applicationContext.xml) - 暗示您在 applicationContext.xml 文件中有您的容器配置;
  • ApplicationContext context = new AnnotationConfigApplicationContext(ConfigClass.class); - 暗示你的 ConfigClass@Configuration class.

但是,如果您的 Spring Boot 应用程序带有 @SpringBootApplication 注释,那么 Application Context 会自动为你实例化,因为:

@SpringBootApplication 注释 consists 的:

  • @EnableAutoConfiguration - 启用 Spring Boot 的自动配置机制;
  • @ComponentScan - 启用 @Component 扫描应用程序所在的包;
  • @Configuration - 允许在上下文中注册额外的 beans 或导入额外的配置 classes.

这将为您启动上下文。

您可以通过 main 方法中的工厂方法获取对由 Spring Boot 创建的 Spring 上下文的引用:SpringApplication.run(MainClass.class, args);

此 returns 对应用程序上下文的引用,您可以将其分配给这样的变量:

ApplicationContext context = SpringApplication.run(MainClass.class, args)