这是我参与更文挑战的第8天,活动详情查看:更文挑战
一、IOC与AOP
IOC
- IoC(Inverse of Control:控制反转)是一种设计思想 ,(注:并非 Spring 特有,其他语言也有);
- 将原本在程序中手动创建对象控制权,当需要创建对象时,只需要配置好配置文件/注解即,交给spring框架管理;
- IoC 容器是 Spring 用来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。
- 好处:
- 将对象之间的相互依赖关系交给iOc容器管理,并且由ioc容器完成对象注入
- 简化手工程序代码来维护对象之间的依赖关系
- Spring IoC的初始化过程
AOP
- AOP(Aspect-Oriented Programming:面向切面编程)
- 适用于处理 与业务无关、为业务模块共同调用的逻辑代码
- 好处:减少系统重复代码,减低代码耦合度,易于维护
- 常用于:
- 事务处理
- 日志管理
- 权限控制
二、spring bean
常见作用域
- singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
- prototype : 每次请求都会创建一个新的 bean 实例。
- request : 每次HTTP请求都会产一个新的bean,该bean仅在当前HTTP request内有效。
- session : 每次HTTP请求都会产一个新的 bean,该bean仅在当前 HTTP session 内有效。
- global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。
单例bean线程安全问题
三、Spring 事务
Spring中事务隔离级别
- TransactionDefinition.ISOLATION_DEFAULT
- 使用后端数据库默认的隔离级别,
- Mysql 默认采用的 REPEATABLE_READ 隔离级别
- Oracle 默认采用的 READ_COMMITTED 隔离级别.
- TransactionDefinition.ISOLATION_READ_UNCOMMITTED
- 最低的隔离级别,
- 允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
- TransactionDefinition.ISOLATION_READ_COMMITTED
- 允许读取并发事务已经提交的数据,
- 可以阻止脏读,但是幻读或不可重复读仍有可能发生
- TransactionDefinition.ISOLATION_REPEATABLE_READ
- 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改;
- 可以阻止脏读和不可重复读,但幻读仍有可能发生。
- TransactionDefinition.ISOLATION_SERIALIZABLE
- 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,事务之间不会相互干扰。
- 可以防止脏读、不可重复读以及幻读,但是这将严重影响程序的性能 ,一般不会使用。