SpringMVC
流程
可参考:
DispatcherServlet接收请求———找到HandlerExecutionChain(包括Handler对象及其拦截器)———委托HandlerAdapter去执行Handle(Controller方法)———执行Controller方法之前,HandlerAdapter会遍历注册的所有HandlerMethodArgumentResolver实例,检查它们是否支持当前方法的参数
参数处理
controller方法参数的处理接口: org.springframework.web.method.support.HandlerMethodArgumentResolver。
常用的其子类:RequestParamMethodArgumentResolver和RequestParamMapMethodArgumentResolver
Spring
1、bean实例化
代码入口
AbstractApplicationContext#refresh——finishBeanFactoryInitialization——preInstantiateSingletons——bean实例化
bean实例化
- beanDefinition的集合
- 扩展点(BeanDefinitionRegistryPostProcessor扩展点):在BeanFactoryPostProcessor基础上,增加了自定义注册beanDefinition的功能。
执行顺序:postProcessBeanDefinitionRegistry,postProcessBeanFactory - 扩展点(BeanFactoryPostProcessor扩展点):更改beanDefinition的信息
- bean的创建
-
4.1、bean集合创建
注:下面扩展点的接口:SmartInstantiationAwareBeanPostProcessor、InstantiationAwareBeanPostProcessor、BeanPostProcessor- 扩展点(实例化前置处理)
- 对象实例化AbstractAutowireCapableBeanFactory#createBeanInstance
- 扩展点(实例化后置处理)
- 待赋值的属性(被注入的字段/方法)封装
- 需要被注入的字段/方法的信息收集:applyMergedBeanDefinitionPostProcessors——AutowiredAnnotationBeanPostProcessor#postProcessMergedBeanDefinition
- 扩展点(解决循环依赖问题):AbstractAutowireCapableBeanFactory#getEarlyBeanReference
- 扩展点(属性赋值):AbstractAutowireCapableBeanFactory#populateBean
- 扩展点(初始化前置处理)
- 对象初始化
- 扩展点(初始化后置处理)
-
4.2、 SmartInitializingSingleton
- bean全部实例化后,逐个执行SmartInitializingSingleton的afterSingletonsInstantiated
-
SpringBoot
1、自动注册ShutdownHook(纯Spring需要手动注册)
通过入口的run方法进入SpringApplication#run——refreshContext方法——SpringApplicationShutdownHook#registerApplicationContext——SpringApplicationShutdownHook#addRuntimeShutdownHookIfNecessary
ShutdownHook执行的顺序:
入口:SpringApplicationShutdownHook#closeAndWait——AbstractApplicationContext#close——doClose
流程:
publishEvent(ContextClosedEvent);
lifecycleProcessor.onClose();
destroyBeans();
closeBeanFactory();
this.onClose();可自定义扩展