当前位置: 首页 > article >正文

spring 没完没了

start

     轻量级开源的j2ee框架,容器框架 装javabean aop ioc

     定义一个starter的jar包,写一个configuration配置类,将bean定义其中,在starter包的meta-inf/spring.factories中写入配置类,springboot会按约定加载该配置类

ioc:重中之重

配置文件配置包扫描路径 获取class文件 反射确定需要ioc管理的类 对需要注入的类依赖注入

   定义一些注解,控制层  业务层 数据持久层 依赖注入注解 获取配置文件  

   获取指定路径下的文件信息及文件夹信息,class文件添加到set集合

   遍历集合 获取指定注解的类 交给ioc,安全的map存储对象

   遍历ioc容器 获取类实例 判断是否依赖其他类实例 递归注入

ioc容器实际map,存各种对象,反射创建对象放入map中

    代码需要用到里面的对象,通过类型/🆔(对象名)注入;没有对象伤不起

控制反转:需要对象时IOC主动创建/使用 对象

依赖注入:IOC容器运行期间 ,动态将某种依赖关系注入到对象中

加载

    spring框框干活,一干一个不吱声

ioc容器:读取配置信息 实例化 管理对象

bean定义:描述 配置要管理的对象,对象类名 属性 依赖关系

bean工厂:实例化 配置管理对象,读取bean定义 据定义创建 初始化bean对象 放入ioc容器

生命周期:尊重生命 热爱生活

上图 虽然一张图胜过千言万语 但是我画的也不是图 死板的流程图罢了

启动流程

作用域

单例singleton:每个容器一个bean实例,beanFactory维护 

prototype原型:每次请求都注入新的实例

request:http请求创建一个单例对象

session:每个session中有个bean实例

application:servletContext生命周期中复用单例对象

websocket:定义在websocket生命周期的

global全局

设计模式:低耦合两个字yyds

工厂beanFactory/factoryBean

适配器advisorAdapter

访问者propertyAccessor

装饰器beanWrapper

代理aop

观察者事件监听

策略instantiationStrategy

模板jdbcTemplate

委派beanDefinitionParseDefenate

责任链beanPostProcessor

aop:这块嘎嘎🦆厉害

CGLIB通过创建目标类的子类来代理原始对象,并在子类中添加增强处理

    代理类class文件加载 修改字节码生成子类 

jdk基于接口 proxy类 被代理对象注入到中间对象

中间对象实现invocationHandler接口(拦截器 反射 代理接口匿名类)

newProxyInstance利用中间对象来生产代理对象

事务:

数据库事务和aop机制

@Transactional注解bean创建代理对象作为bean

调用代理对象方法先判断方法上是否加了Transactional注解

   如果咱就说如果加了  利用事务管理器 创建数据库连接 autocommit=false

spring事务传播机制是spring自己实现的,基于数据库连接做的

    一个数据库连接一个事务,这句话挺重要的!新开一个事务 先建连接再执行sql

   事务创建/提交/回滚通过transactionInterceptor切面完成,据事务管理器和属性自动管理

platformTransactionManager实现

    dataSourceTransactionManager:jdbc和mybatis的

    jtaTransctionManager:分布式事务 xa接口 多资源事务管理

   spring事务核心 transactionDefinition定义属性(隔离级别/传播行为/超时/只读)和transactionStatus(是否新事物/是否标记为回滚)

失效

私有方法 / 未被spring管理 /方法用final修饰/方法内部调用/未开启事务

传播属性

propagation_required 当前则没有新建,有则加入,默认

propagationrequiresnew 当前存在挂起 新建事务(和挂起的无关) 内抛异常外层捕获可不处理

propagation_supports支持当前事务,无事务 非事务方式执行

propagation_mandatory支持当前事务 没有抛异常

propagationnotsupported以非事务方式操作 当前存在则挂起

propagation_never非事务方式执行,存在事务抛异常

propagation_nested活动事务存在 运行一个嵌套事务中,无required执行使用单独事务,使用独立事务,拥有多个回滚的保存点,内部事务的回滚不会对外部事务造成影响,只对datasourceTransactionManager事务管理器有效

循环依赖

三级缓存

lazy解决构造方法造成的循环依赖问题

一级缓存 初始化的单例对象 singletonObjects

二级earlySingletonObjects缓存保存new出来的不完整对象,当单例池中找不到依赖的属性时,先从二级缓存中获取不完整对象,完成对象创建,后续依赖注入中 单例池中对象引用关系调整完成

三级缓存singletonFactories,引用对象配置了aop,单例池中最终会需要注入动态代理对象(对象初始化之后才开始),非原对象,保存所有对象的动态代理配置信息,发现有循环依赖时 获取代理对象 提前aop

后置处理器

       beanFactory后置处理器BeanFactoryPostProcessor,spring启动先创建beanFactory实例 实例化所有bean后 依赖注入前,后置处理器加工beanFactory,spring扫描基于beanFactory实现

       bean后置处理器BeanPostProcessor,先实例对象,bean后置处理器对该对象加工,依赖注入给autowired自动赋值,aop基于原实例对象进行动态代理,生成代理对象


http://www.kler.cn/a/273693.html

相关文章:

  • 12_Redis发布订阅
  • C++例程:使用I/O模拟IIC接口(6)
  • STM32F4分别驱动SN65HVD230和TJA1050进行CAN通信
  • AAAI2023《Controllable Image Captioning via Prompting》
  • 详细分析 Git 分支重命名与同步操作
  • RK3568 Android 13 内置搜狗输入法小计
  • flink重温笔记(十七): flinkSQL 顶层 API ——SQLClient 及流批一体化
  • Excel xlsx file:not supported
  • 零基础学python:10、 函数的基础3
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Rect)
  • springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出
  • k8s admin 用户生成token
  • JavaScript之继承
  • 【sql】初识 where EXISTS
  • MySQL---索引
  • 第十四届蓝桥杯省赛C++B组题解
  • 【Unity动画】Unity如何导入序列帧动画(GIF)
  • 护眼灯和白炽灯哪个更保护眼睛?四款必选的高口碑护眼台灯
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • idea2023 运行多 springboot 实例
  • 计算机网络:TCP篇
  • 外贸网站常用的wordpress模板
  • 学习笔记Day8:GEO数据挖掘-基因表达芯片
  • 用JDBC游标的方式导出mysql数据以及springboot打包成exe程序实践
  • 每天一个数据分析题(二百一十六)
  • SpringBoot2.7集成Swagger3