spring初解

73 阅读2分钟

扩展功能。有完善且庞大的生态,springboot、springmvc、springcloud等。# spring是一个容器,主要通过IOC来实现,DI、AOP是扩展功能。有完善且庞大的生态,springboot、springmvc、springcloud等。

spring的IOC是指控制反转,这个是理论思想,容器的启动流程为: 启动方法入口:refresh:

  1. prepareRefresh()  :处理容器刷新前的准备工作
  • 主要做:设置容器启动时间、标识位、检查必填属性是否可解析、初始化环境变量等
  1. obtainFreshBeanFactory() : 获取新的容器,并创建出 DefaultListableBeanFactory 工厂、封装注册BeanDefinition
  • 创建工厂defaultListableBeanFactory,设置默认的初始工厂属性,例如:是否允许循环依赖等。

  • 加载bean的定义信息,通过BeanDefinitionRoad读取Bean的信息并封装为BeanDefinition放到beanDefinitionMap中。

  1. prepareBeanFactory BeanFactory有了,就需要对工厂进行设置和增强本方法中主要:设置类加载器、添加一些增强器BeanPostProccessor、注册默认的5个对象到容器
  • 设置类加载器
  • 增加一些BeanFactory增强器(典型的:占位符解析) 复制代码
  • 增加BeanPostProccessor:Bean的增强器,此时不会执行,在初始化时在执行。

4.postProccessorBeanFactory 提供的扩展钩子,可扩展对BeanFactory进行增强和修改,springboot中的自动装配依赖的注解好像就是通过这个进行增强实现的--springboot的注解解析增强器。

5.invokeBeanFactoryPostProccessors 执行BeanFactory的增强器逻辑。

  • 典型的:占位符解析就是在这个时候执行的:@Value 把真实的值解析出来

6.registerBeanPsotProccess 注册Bean的PostProcess到容器,不会真正执行,要在初始化时执行

7.initMessageSource 国际化处理,不重要

8.initApplicationEventMulticaster 初始化应用事件多播器

9.onRefresh 模板方法,扩展钩子,springboot的容器自动启动就是在这里扩展的、

10.registerListeners 注册一些监听器。

11.finishBeanFactoryInitialization 最重要的方法,用来初始话Bean,3级缓存、解决循环依赖、AOP、代理的增强都在这里。

  • 注册一些默认的属性编辑器到 BeanFactory 中,以便支持从字符串到特定类型的自动转换(例如将字符串转换为日期对象)
  • 遍历BeanDefinition解析Bean的信息
  • 通过反射创建Bean对象
  • 通过populateBean方法进行属性填充,通过getBean->doGetBean->createBean->doCreateBean->createBeanInstance------todo-- 同时通过三次缓存解决循环依赖
  • 通过invokeAwareMethods方法解决Aware接口,注入容器类的接口属性
  • BeanPostProccessor 增强器相关处理:初始化方法initMethod之前处理
  • initMethod 初始化方法调用
  • BeanPostProccessor 增强器的afterInitMethod处理,AOP、动态代理都是在这里处理的
  • 如果Bean实现了DisposableBean的destroy()相关销毁方法,那么会注册到容器中
  • 返回最终的Bean
  1. finishRefresh 容器启动完成,释放缓存、发布容器刷新事件
  • 释放缓存、发布刷新事件