为了账号安全,请及时绑定邮箱和手机立即绑定

关于Spring框架中的AnnotationConfigApplicationContext

关于Spring框架中的AnnotationConfigApplicationContext

largeQ 2022-12-28 14:31:24
我编写了以下简单的独立 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 {@Autowiredprivate Environment env;@Autowiredprivate ApplicationContext ctx;@Autowiredprivate 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() 中初始化的上下文。基本上无法理解这些是如何自动装配的(以及它们被设置成什么?)任何有助于理解这一点的帮助都会有很大帮助。
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

任何被注解的类@Configuration也是一个 Spring bean。这意味着这MainDirver也是一个将在创建期间创建的 spring bean AnnotationConfigApplicationContext

MainDirver创建 bean 之后,如果该字段被注解,Spring 将把其他 bean 注入到它的字段中@Autowird。所以在这种情况下,EnvironmentApplicationContext, 和ConfigurableEnvironment都注入了这个 MainDirver bean。

PS 您可以认为EnvironmentApplicationContextConfigurableEnvironment是一种必须创建的 Spring 基础结构 bean,即使您没有使用 、 和 等定义它们@Configuration也是@Service如此@Bean


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信