首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring 容器和 Bean 的创建过程

Spring 容器和 Bean 的创建过程

原创
作者头像
叶子--
发布于 2025-05-18 15:30:19
发布于 2025-05-18 15:30:19
5430
举报

Spring 容器和 Bean 的创建过程是 Spring 框架的核心机制,以下是其关键流程的详细说明:


​​一、Spring 容器创建过程​​

Spring 容器(如 ApplicationContext)的创建主要分为以下步骤:

1. ​​加载配置​​
  • ​​配置文件/注解扫描​​:容器根据配置(XML、JavaConfig 或注解)定位需要加载的资源。
    • XML:通过 ClassPathXmlApplicationContext 加载 applicationContext.xml。
    • 注解:通过 AnnotationConfigApplicationContext 扫描 @ComponentScan 指定的包。
  • ​​资源解析​​:BeanDefinitionReader 读取配置,解析为 BeanDefinition 对象(Bean 的元数据)。
2. ​​注册 BeanDefinition​​
  • ​​BeanDefinition 注册表​​:将解析后的 BeanDefinition 存入 BeanDefinitionRegistry(如 DefaultListableBeanFactory)。
  • ​​处理扩展点​​:调用 BeanFactoryPostProcessor(如 PropertySourcesPlaceholderConfigurer)修改 Bean 定义。
3. ​​初始化容器​​
  • ​​实例化 BeanFactory​​:创建 DefaultListableBeanFactory 作为 Bean 工厂。
  • ​​加载后处理​​:执行 BeanFactoryPostProcessor.postProcessBeanFactory() 方法(例如解析占位符 ${})。
4. ​​注册内置组件​​
  • 注册 ApplicationContextAwareProcessor 等内置组件,用于处理 Aware 接口回调。

​​二、Bean 的创建过程​​

当调用 getBean() 或容器初始化时,Bean 的创建流程如下:

1. ​​实例化 Bean​​
  • ​​构造函数选择​​:根据配置(无参构造、工厂方法等)创建 Bean 实例。
  • ​​反射/CGLIB 代理​​:普通类用反射,代理类(如 AOP)用 CGLIB 生成子类。
2. ​​依赖注入(属性填充)​​
  • ​​自动装配​​:按 @Autowired、@Resource 等注解注入依赖。
  • ​​解决循环依赖​​:通过三级缓存(singletonFactories、earlySingletonObjects)提前暴露未初始化的 Bean。
3. ​​Aware 接口回调​​
  • 调用 BeanNameAware、BeanFactoryAware、ApplicationContextAware 等接口方法。
4. ​​BeanPostProcessor 前置处理​​
  • 执行 BeanPostProcessor.postProcessBeforeInitialization()(例如 @PostConstruct 处理)。
5. ​​初始化方法​​
  • ​​自定义初始化​​:执行 InitializingBean.afterPropertiesSet() 或 @Bean(initMethod="...") 指定的方法。
6. ​​BeanPostProcessor 后置处理​​
  • 执行 BeanPostProcessor.postProcessAfterInitialization()(例如 AOP 代理在此阶段生成)。
7. ​​Bean 就绪​​
  • Bean 被放入单例池(singletonObjects),后续可通过容器获取。
8. ​​销毁阶段​​
  • 容器关闭时调用 @PreDestroy、DisposableBean.destroy() 或自定义销毁方法。

​​三、关键扩展点​​

  1. ​​BeanFactoryPostProcessor​​
    • 修改 Bean 定义(如替换占位符)。
  2. ​​BeanPostProcessor​​
    • 干预 Bean 初始化前后的逻辑(如 AOP、事务)。
  3. ​​Aware 接口​​
    • 让 Bean 感知容器环境(如获取 BeanName)。
  4. ​​InitializingBean/DisposableBean​​
    • 定义初始化和销毁逻辑。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • ​​一、Spring 容器创建过程​​
    • 1. ​​加载配置​​
    • 2. ​​注册 BeanDefinition​​
    • 3. ​​初始化容器​​
    • 4. ​​注册内置组件​​
  • ​​二、Bean 的创建过程​​
    • 1. ​​实例化 Bean​​
    • 2. ​​依赖注入(属性填充)​​
    • 3. ​​Aware 接口回调​​
    • 4. ​​BeanPostProcessor 前置处理​​
    • 5. ​​初始化方法​​
    • 6. ​​BeanPostProcessor 后置处理​​
    • 7. ​​Bean 就绪​​
    • 8. ​​销毁阶段​​
  • ​​三、关键扩展点​​
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档