当前位置:实例文章 » JAVA Web实例» [文章]spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?

发布人:shili8 发布时间:2025-02-11 00:11 阅读次数:0

**Spring复习:@Configuration注解配置的singleton的bean**

在Spring框架中,`@Configuration`注解是用来定义Bean定义的类。这些类可以通过Java配置方式来创建Bean实例。在本文中,我们将讨论`@Configuration`注解配置的singleton的bean何时被创建出来并缓存到容器中。

**什么是singleton的bean**

在Spring框架中,singleton的bean指的是一个bean实例在整个应用程序生命周期内只会被创建一次。也就是说,每次从容器中获取这个bean实例时,都会返回同一个实例。

**@Configuration注解配置的singleton的bean**

当我们使用`@Configuration`注解来定义Bean定义的类时,Spring框架会自动为这些类创建一个BeanFactoryPostProcessor。这个BeanFactoryPostProcessor负责扫描这些类,并将它们注册到容器中。

在容器初始化过程中,Spring框架会先调用所有的BeanFactoryPostProcessor,然后再创建bean实例。在这种情况下,`@Configuration`注解配置的singleton的bean也会被创建出来并缓存到容器中。

**示例代码**

以下是使用`@Configuration`注解来定义一个简单的Bean定义类:

java@Configurationpublic class MyConfig {
 @Bean public User getUser() {
 return new User();
 }
}

在上面的代码中,我们定义了一个名为`MyConfig`的类,并使用`@Configuration`注解来标记它。然后,我们定义了一个名为`getUser`的方法,并使用`@Bean`注解来标记它。

**容器初始化过程**

以下是容器初始化过程中的关键代码:
javapublic class AnnotationConfigApplicationContext extends GenericApplicationContext {
 public void refresh() throws BeansException {
 // ...
 for (BeanDefinitionHolder holder : beanDefinitions) {
 BeanFactoryPostProcessor postProcessor = getBeanFactory().getBeanFactoryPostProcessors();
 if (postProcessor != null) {
 postProcessor.postProcessBeanFactory(getBeanFactory());
 }
 }
 // ...
 }

 public void registerBeanDefinitions(BeanDefinitionReader reader, ResourceLoader resourceLoader)
 throws BeanDefinitionStoreException {
 // ...
 for (BeanDefinitionHolder holder : beanDefinitions) {
 getBeanFactory().registerBeanDefinition(holder.getBeanName(), holder.getBeanDefinition());
 }
 // ...
 }
}

在上面的代码中,我们可以看到Spring框架先调用所有的BeanFactoryPostProcessor,然后再创建bean实例。在这种情况下,`@Configuration`注解配置的singleton的bean也会被创建出来并缓存到容器中。

**总结**

在本文中,我们讨论了`@Configuration`注解配置的singleton的bean何时被创建出来并缓存到容器中。我们看到Spring框架先调用所有的BeanFactoryPostProcessor,然后再创建bean实例。在这种情况下,`@Configuration`注解配置的singleton的bean也会被创建出来并缓存到容器中。

**参考**

* [Spring Framework Reference Documentation]( />* [Spring Boot Reference Documentation](

其他信息

其他资源

Top