Spring总结

2 篇文章 0 订阅
1 篇文章 0 订阅

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实例化

  1. beanDefinition的集合
  2. 扩展点(BeanDefinitionRegistryPostProcessor扩展点):在BeanFactoryPostProcessor基础上,增加了自定义注册beanDefinition的功能。
    执行顺序:postProcessBeanDefinitionRegistry,postProcessBeanFactory
  3. 扩展点(BeanFactoryPostProcessor扩展点):更改beanDefinition的信息
  4. 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();可自定义扩展

TODO 后续逐步补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值