首页 > 其他分享 >SpringBoot 启动顺序 、BeanPostProcessor 、事务原理、三级缓存、SpringMVC

SpringBoot 启动顺序 、BeanPostProcessor 、事务原理、三级缓存、SpringMVC

时间:2023-03-16 16:13:58浏览次数:38  
标签:BeanPostProcessor 缓存 里面 SpringBoot SpringMVC 创建 对象 二级缓存 三级

Spring MVC 先生成web容器,比如TOMCAT ,然后注册 servletDispathcer,  Spring容器在DispatcherServlet里面

BeanPOSTProcessor 可以在bean生成后对bean属性进行更改

事务是基于切面来做的,代理对象会去获取一个数据库连接、获取到连接之后把自动提交关闭,然后才可以在捕获到异常时,对事务进行回滚。

因为是基于切面的实现,所以必须要有代理对象,这也能解释一部分事务失效的情况。

 

 

创建A 的时候,先生成A的普通对象,之后在一个set里面记录A对象正在创建(用于判断是否循环依赖)

之后将A的普通对象、bean名称、和bean描述 生成lambda 表达式放进 三级缓存 也就是earlyFactoryMap里面

之后填充其他属性,如果涉及到B类,那么就要先去创建B类,先从一级缓存也就是单例池SingleMap里面找,

找不到就去二级缓存earlyBean早期beanMap里面找,找不到就去三级缓存里面找,都找不到,

所以新建B的普通对象,记录B正在创建,生成lambda表达式,放入三级缓存,

然后发现又依赖A,所以这个时候发现A正在创建,所以产生了循环依赖,所以取出A的lambda表达式来创建早期的A

创建完成后放入二级缓存(这一步如果A需要AOP,就生成代理对象,如果不需要就是普通对象),这个时候B就可以使用早期A对象

然后B继续往后走流程,这个时候B可能也需要AOP,那么B也会同样使用lambda表达式去完成这一步,然后放入二级缓存,然后B完成创建再放入三级缓存。

这个时候B创建完成,回到A里面,因为B已经完成,所以A里面的B填充成功,这个时候A继续往下走,当要AOP的时候发现二级缓存里面有,直接跳过AOP环节

将A从二级缓存放入三级缓存,这样循环依赖就解决了。

 

标签:BeanPostProcessor,缓存,里面,SpringBoot,SpringMVC,创建,对象,二级缓存,三级
From: https://www.cnblogs.com/orangeJuiceRain/p/17222989.html

相关文章

  • SpringBoot相关问题
    参考:https://juejin.cn/post/6844904125709156359为什么需要spring-boot-maven-pluginspring-boot-maven-plugin提供了像jar一样打包或者运行应用程序的命令spring-boot......
  • springboot中配置elasticSearch
    1.1.1 在build.gradle中添加需要的jar包   我创建的gradle工程,对应的maven工程也是一样,添加对应的jar包即可//添加SpringDataElasticsearch的依赖comp......
  • 前后端分离项目(vue+springboot)集成pageoffice实现在线编辑office文件
    前后端分离项目下使用PageOffice原理图集成步骤前端vue项目在您Vue项目的根目录下index.html中引用后端项目根目录下pageoffice.js文件。例如:<scripttype="te......
  • SpringBoot使用jasypt加解密密码
    在我们的服务中不可避免的需要使用到一些秘钥(数据库、redis等);使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。打开applic......
  • day04-实现SpringBoot底层机制
    实现SpringBoot底层机制Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器1.任务1-创建Tomcat,并启动(1)创建一个Maven项目,修改pom.xml文件:我们需要自己创建Tomca......
  • Java:SpringBoot获取所有接口的路由映射关系
    重要:版本很重要,先说一下版本,版本不一样,可能获取结果也不一样spring-boot2.7.7java1.8定义一个查看路由的数据结构packagecom.example.demo.entity;importlombok.......
  • 最全SpringBoot日志配置-按照日期和日志级别进行归档
    指定日志文件路径在spring的配置文件中配置:logging:config:classpath:logback.xm日志配置<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="tue"s......
  • SpringBoot+MyBatis批量插入数据的三种方式
    1.背景介绍在开发过程中,我们经常会遇到往数据库表中插入大量数据的场景,比如excel批量导入数据。那么该如何快速地插入数据呢?我们可以考虑使用批量插入来实现,实测100000......
  • SpringMVC中的适配器模式
    目录一、适配器模式在SpringMVC框架应用的源码剖析二、模拟适配器的应用三种处理器适配器接口适配器对于三种不同处理器的适配CustomDispatchServlet测试三、分析适配器3.1......
  • SpringMVC
    01-mvc简介......