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)
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)