关于Spring框架中的AnnotationConfigApplicationContext

rdlzhqv9  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(100)

我写了以下简单的独立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()中,我们创建了一个新的Application上下文,然后创建Bean并最终调用test()方法。
我不明白的是,EnvironmentApplicationContextConfigurableEnvironment是如何自动连接的(以及连接到哪个bean?)
我观察到autowired ctx获取了main()中初始化的上下文。
基本上不能理解这些是如何自动连接的(以及它们被设置为什么?)
任何有助于理解这一点的帮助都将是巨大的帮助。

ccgok5k5

ccgok5k51#

任何使用@Configuration注解的类也是Spring Bean。这意味着MainDriver也是将在创建AnnotationConfigApplicationContext时创建的Spring Bean。
在创建MainDriver bean之后,如果该字段用@Autowired注解,Spring将向其字段注入其他bean。因此在本例中,EnvironmentApplicationContextConfigurableEnvironment都注入了这个MainDriver bean。

  • P.S.你可以认为EnvironmentApplicationContextConfigurableEnvironment是必须创建的Spring基础设施bean,即使你没有使用@Configuration@Service@Bean等定义它们。

相关问题