0

我是 Spring 的初学者,我在理解这两者的工作原理时遇到了问题。我将通过示例来解决我的问题。

我们有一个带有 Spring Core 模块的项目,在那个项目中,我们有两个@Component在不同包中注释的类和一个在第三个包中的主类。

现在我们创建了三个不同的@Configuration类,在一个类中,我们指定@ComponentScan(package with first @Component annotated class)将其称为 config1,在几秒钟内,我们指定@ComponentScan(package with second @Component annotated class)将其称为 config2,在第三个类中,我们指定将其@ComponentScan(both packages)称为 config3。

现在在主类中,我们有以下代码:

public static void main(String[] args) {

  // point 1 in time
  System.out.println("lalalalalala");

  // point 2 in time
  AnnotationConfigApplicationContext context1 =
                new AnnotationConfigApplicationContext(config1.class);

  // point 3 in time
  AnnotationConfigApplicationContext context2 =
                new AnnotationConfigApplicationContext(config2.class);

  // point 4 in time
  AnnotationConfigApplicationContext context3 =
                new AnnotationConfigApplicationContext(config3.class);
}

我的理解:

在时间点 1,我们的应用程序正在运行 Spring Core。此时 Spring 创建了 Container 并且它没有对象。它是空的。 时间点1

那么我们创建AnnotationConfigApplicationContext类型的对象。我们将 config1 类作为参数发送给该对象。然后该对象将读取@ComponentScan注释并扫描 POJO 和元数据。扫描后,AnnotationConfigApplicationContext对象将创建 bean(本例中为 1 个 bean,并使用这种类型的上下文进行预加载)并将它们放置在 Spring Container 中。所以在我们的应用程序的这一点上,我们第一次在我们的 Spring Container 中有一些东西。 时间点 2 类型的对象AnnotationConfigApplicationContext 只会引用我们放入容器中的 bean?!那么当我们调用getBean()方法时,我们的 Context 会从 Container 中“带”出 bean 吗?

同样的事情发生在时间点 3 和时间4 上......

所以,基本上我的问题是:对象是某种实现BeanFactory,读取 POJO 和元数据,创建 BEANS 并将它们放入 Spring Container?它不包含bean,它只指向容器中的那些bean?而Container只包含那些bean,他除了持有bean之外没有任何功能,就像它只是放在内存中一样?而且我们的应用程序中只有一个 Container,我们可以有多个 BeanFactory 对象但只有一个 Container?

4

0 回答 0