119、Spring容器启动流程是怎样的(配有Spring启动完整流程图)

Spring容器启动流程是怎样的

  1. 在创建Spring容器,也就是启动Spring时:
  2. 首先会进行扫描,扫描得到所有的BeanDefinition对象,并存在一个Map中
  3. 然后筛选出非懒加载的单例BeanDefinition进行创建Bean,对于多例Bean不需要在启动过程中去进行创建,对于多例Bean会在每次获取Bean时利用BeanDefinition去创建
  4. 利用BeanDefinition创建Bean就是Bean的创建生命周期,这期间包括了合并BeanDefinition、推断构造方法、实例化、属性填充、初始化前、初始化、初始化后等步骤,其中AOP就是发生在初始化后这一步骤中
  5. 单例Bean创建完了之后,Spring会发布一个容器启动事件
  6. Spring启动结束
  7. 在源码中会更复杂,比如源码中会提供一些模板方法,让子类来实现,比如源码中还涉及到一些BeanFactoryPostProcessor和BeanPostProcessor的注册,Spring的扫描就是通过BenaFactoryPostProcessor来实现的,依赖注入就是通过BeanPostProcessor来实现的
  8. 在Spring启动过程中还会去处理@Import等注解
相关推荐
wl851113 分钟前
Spring @Bean注解使用场景二
java·后端·spring
失业写写八股文5 小时前
Spring基础:Spring的事物哪些情况下会失效
java·后端·spring
Zijian/TENG12 小时前
依赖倒置 DIP、依赖注入 DI、控制反转 IoC 和工厂模式
设计模式·设计原则·工厂模式·依赖注入·控制反转·依赖倒置
Java水解15 小时前
Spring DI的艺术:优雅解耦代码!!!
后端·spring
老友@16 小时前
Caffeine 缓存:简介、优势及应用场景
后端·spring·缓存·优化·caffeine·三级缓存
时间之城16 小时前
笔记:记一次使用RabbitMq的x-delayed-message延迟消息插件,出现消息立即消费,延迟时间后再次消费,引发的重复消费问题
spring boot·笔记·spring·rabbitmq
真的睡不醒ovo17 小时前
关于解决新版本spring项目请求测试接口返回406的问题
java·后端·spring
小安同学iter20 小时前
SpringMVC(五)拦截器
java·开发语言·spring boot·spring·java-ee
其实我就是个萌新21 小时前
使用spring data MongoDB对MongoDB进行简单CURD操作示例
java·mongodb·spring
小小鸭程序员21 小时前
NPM版本管理终极指南:掌握依赖控制与最佳实践
java·前端·spring·npm·node.js