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](