Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: Ioc容器refresh总结(3)--- Spring源码从入门到精通(三十三)

上篇文章介绍了,调用bean工厂的后置处理器,主要分为两步:


他是在beanFactory预准备标准初始化之后执行invokBeanFactoryPostProcessor;先调用beanDefinitionRegistryPostProcessor,在调用beanFactoryPostProcessor,里面都有借口优先级。Ioc容器refresh总结(2)--- Spring源码从入门到精通(三十二)


六、registerBeanPostProcessor(beanFactory)


注册bean的后置处理器,beanPostProcessor作用:拦截bean的创建过程,在bean初始化前后调用。Intercept bean creator。

实现beanPostProcessor的接口有:

1、DestructionAwareBeanPostProcessor,其中postProcessorBeforeDestruction容器销毁前调用的后置处理,可以destory-method指定和@PreDestory。其中对应的@PostConstrut和init-method方法是在对象初始化之前调用(也就是对象创建构造器之后调用)。

2、InstantiationAwareBeanPostProcessor类,在对象初始化前后调用,分别调用postProcessorBeforeInitialization和postProcessorAfterInitialization,及其用后置处理器postProcessPropertyValues赋值完成之后,运用解析@Autowired和@Value。

3、SmartInstantiationAwareBeanPostProcessor类,用determineCandidateConstructors推断使用啥构造函数之前,和调用getEarlyBeanReference提早获取bean,解决循环依赖,提早创建代理类。

4、MergedBeanDefinitionPostProcessor类,在预处理@autowired@Value调用postProcessorMergeBeanDefinition。

不同后置处理器的bean创建的执行时机是不一样的。

从beanFactory获取所有BeanPostProcessor类型的;后置处理器都有优先级,通过这两个接口PriorityOrdered ,Ordered指定。

优先注册PriorityOrdered接口的beanPostProcessor。

image.png

把每一个BeanPostProcessor,用addBeanPostProcessor方法添加到beanFactory的BeanPostProcessor中。

  1. 再注册Ordered接口的beanPostProcessor。

image.png

  1. 第三步注册没有实现任何接口的beanPostProcessor。
  2. 最终注册mergedBeanDefinitionPostProcessor
  3. 注册一个applicationListenerDetector;bean创建完成之后,检测是否是 ApplicaitionListerner,是的话放在applicationContext容器中保存起来。

image.png

相关文章
|
18天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
10 2
|
7天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
28 9
|
1月前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
23 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
1月前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
22 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
28天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
62 0
|
4天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
13 2
|
13天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
9天前
|
关系型数据库 MySQL API
|
10天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
198 7
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库