Spring 是一个一 IOC 和 AOP 为核心的松耦合的非侵入式的分层式企业级应用开发框架
非侵入式:可以在对现有结构不影响的前提下增强 JavaBean 的功能(DI)
松耦合:AOP、DI
Spring 中 IOC 就是将对象的创建交给 Spring 容器来完成,再通过依赖注入来使用容器中的对象。
Spring AOP 面向切面编程,就是将区别于业务之外的功能独立出来,进行管理和扩展。
Spring AOP 是基于 IOC 实现的,本质实在 Bean 初始化过程中 通过 Bean后置处理器 中的动态代理来做扩展。
关键字: 切面、切点、通知(before、after、around、after throwing、after returing)
日志、动态代理、Bean的增强处理器、事务管理、动态代理
Bean 的定义信息 => Bean 的实例化 => Bean 的初始化 => Bean 的使用 => Bean 的销毁
使用三级缓存,将Bean在初始化完成之前进行提前暴露
获取 Class 对象
获取 Class 对象的构造器
创建对象
注解注入、构造器注入、Setter 注入
Spring 自带
@Bean:作用于方法,一般用于配置类中
@Component、@Service、@Controller、@Repository、@RestController:作用于类
mybatis plus
@Mapper:作用于类
事务的传播性产生于事务的嵌套,内层事务不会对外层造成影响,所以事务的传播性指的其实是外部事务对内部事务的影响,所以对于内部事务,主要分为三大类:
死活不能有事务的:
Never:外部有事务就抛出异常
Not_Support: 将外部事务挂起后非事务执行
必须要有事务的:
Required:外部有就用外部事物,没有就创建事务(SpringBoot @Transactional 注解默认是这个)
Required_new: 不管外部有没有事务,都创建自己的事务,外部有事务就挂起
Nested:外部没有事务就创建事务,外部有事务就创建事务并嵌套在外部事务中
Mandatory:外部没有事务就报异常,外部有事务就用外部事务
可有可无的:
Supported: 外部有事务就用外部事务,没有就算了
隔离级别:read uncommited < read committed < repeatable read < seriazable
可能的问题:脏读、幻读、不可重复读、回滚覆盖、提交覆盖
数据库:MySQL默认:repeatable read
SqlServer、Oracle:read committed