关于 Spring 框架中的 AnnotationConfigApplicationContext
About AnnotationConfigApplicationContext in Spring framework
我已经编写了以下简单的独立 spring 应用程序:
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
@Configuration
@ComponentScan(basePackages = { "com.example" })
@PropertySource(ignoreResourceNotFound = true, value = "classpath:/application.props")
public class MainDriver {
@Autowired
private Environment env;
@Autowired
private ApplicationContext ctx;
@Autowired
private ConfigurableEnvironment cenv;
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(MainDriver.class);
MainDriver l = ctx.getBean(MainDriver.class);
System.out.println("In main() the ctx is " + ctx);
l.test();
}
public void test() {
System.out.println("hello");
System.out.println("env is " + env);
System.out.println("cenv is " + cenv);
System.out.println("ctx is" + ctx);
}
}
我了解到在 main() 中我们正在创建一个新的应用程序上下文,然后创建 Bean 并最终调用 test() 方法。
我无法理解 Environment
、 ApplicationContext
和 ConfigurableEnvironment
是如何自动装配的(以及哪个 bean?)
我观察到自动装配 ctx
获取了在 main() 中初始化的上下文。
基本上无法理解这些是如何自动装配的(以及它们被设置成什么?)
任何有助于理解这一点的帮助都会有很大帮助。
任何用 @Configuration
注释的 class 也是一个 Spring bean。这意味着 MainDirver
也是将在创建 AnnotationConfigApplicationContext
.
期间创建的 spring bean
并且在创建 MainDirver
bean 之后,如果该字段用 @Autowird
注释,Spring 将随后将其他 bean 注入到它的字段中。所以在这种情况下,Environment
、ApplicationContext
和 ConfigurableEnvironment
都被注入了这个 MainDirver bean。
P.S。您可以认为 Environment
、 ApplicationContext
和 ConfigurableEnvironment
是一种必须创建的 Spring 基础结构 bean,即使您没有使用 @Configuration
定义它们, @Service
, @Bean
等等
我已经编写了以下简单的独立 spring 应用程序:
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
@Configuration
@ComponentScan(basePackages = { "com.example" })
@PropertySource(ignoreResourceNotFound = true, value = "classpath:/application.props")
public class MainDriver {
@Autowired
private Environment env;
@Autowired
private ApplicationContext ctx;
@Autowired
private ConfigurableEnvironment cenv;
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(MainDriver.class);
MainDriver l = ctx.getBean(MainDriver.class);
System.out.println("In main() the ctx is " + ctx);
l.test();
}
public void test() {
System.out.println("hello");
System.out.println("env is " + env);
System.out.println("cenv is " + cenv);
System.out.println("ctx is" + ctx);
}
}
我了解到在 main() 中我们正在创建一个新的应用程序上下文,然后创建 Bean 并最终调用 test() 方法。
我无法理解 Environment
、 ApplicationContext
和 ConfigurableEnvironment
是如何自动装配的(以及哪个 bean?)
我观察到自动装配 ctx
获取了在 main() 中初始化的上下文。
基本上无法理解这些是如何自动装配的(以及它们被设置成什么?)
任何有助于理解这一点的帮助都会有很大帮助。
任何用 @Configuration
注释的 class 也是一个 Spring bean。这意味着 MainDirver
也是将在创建 AnnotationConfigApplicationContext
.
并且在创建 MainDirver
bean 之后,如果该字段用 @Autowird
注释,Spring 将随后将其他 bean 注入到它的字段中。所以在这种情况下,Environment
、ApplicationContext
和 ConfigurableEnvironment
都被注入了这个 MainDirver bean。
P.S。您可以认为 Environment
、 ApplicationContext
和 ConfigurableEnvironment
是一种必须创建的 Spring 基础结构 bean,即使您没有使用 @Configuration
定义它们, @Service
, @Bean
等等