SPIRNG 学习笔记

本文探讨了Spring中bean的线程安全性问题,Spring启动流程中的关键步骤,以及IoC、DI、AOP和事务管理的原理,包括事务传播机制和SpringBoot的自动装配机制。特别关注了事务失效和循环依赖的处理方式。
摘要由CSDN通过智能技术生成
Spring 中的bean是否线程单例安全的?

默认的bean实例时单例的,所以如果单例里面有一个变量,多线程去修改的时候会有并发安全的问题。

Spring 启动流程。

在查看spring 的启动流程的时候跟进去发现有个refash()方法,里面有几步是比较重要的,像那个创建beanFactory 的一个方法,他会创建所有的beandefinition 对象嘛,然后会执行注册一些后置处理器的一些方法。最后有一个步骤,创建所有的bean对象,像那个getBean() 然后doGetBean()方法,然后调用一些createBean() doCreateBean()的方法来走bean的生命周期。

Spring 框架的重要部分

  • IOC
  • AOP
  • DI
  • spring事务
IOC

IOC 全程控制反转,就是把创建对象的权力从程序员的手里放到了容器的手里。

其次他帮我们管理了对象依赖关系,也就是DI,极大的减少了Java开发的难度。

DI

依赖关系,自动帮我们注入所需要的类。

AOP

面向切面编程,可以帮我们处理一些通用的逻辑,比如权限校验,过滤,拦截器这种与业务无关的逻辑代码。方便统一管理。

spring事务

本质是通过AOP来管理事务,无需手动编程操作事务。还有想事务传播机制,两种比较常用的,REQUIRED跟REQUIRED_NEW ,作为一个整体的事务,跟每次都起一个新的子事务。

事务传播机制

精品好文 https://www.cnblogs.com/chanshuyi/p/head-first-of-spring-transaction.html

内容总结:

针对事务传播机制,我们要弄明白的是4个点:

  1. 子事务与父事务的关系,是否会启动一个新的事务?
  2. 子事务异常,父事务是否会回滚?
  3. 子事务异常时,子事务是否会回滚?
  4. 父事务捕获异常后,父事务是否还会回滚?

REQUIRED :子方法不启动一个新事务,共用一个事务,只要发生异常回滚,整个事务都回滚。

REQUIRED_NEW : 无论当前方法是否存在事务,子方法都新建一个事务。此时父子方法的事务是独立的,它们都不会互相影响。但父方法需要注意子方法抛出的异常,避免因子方法抛出异常,而导致父方法回滚。

NESTED : 当前方法存在事务时,子方法嵌套事务执行,父方法回滚时,子事务跟着回滚。子方法发生回滚时,父方法根据是否捕获异常判断是否发生回滚。

spring事务失效

当一个没有Transactional注解的方法调用另一个有Transactional的方法,事务会失效,因为事务是基于动态代理的。

循环依赖

spring如何解决循环依赖的, 他是用了一个三级缓冲来解决的,其主要的思想就是要把需要的对象提前暴露出来给别的对象进行引用。

springboot的自动装配

其自动装配是用了一种SPI的思想,每个starter 都可以自定义装配的对象。

其核心的自动装配模块会去读取spring.factories 文件下的类,根据条件注解加载对应的类。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值