Spring 是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring核心:
- IOC
控制反转(Inverse of Control)
是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理,平时我们是要通过new创建出来对象,现在只需要将对象交由容器,需要时向容器获取。 - AOP
面向切面编程(Aspect-Oriented Programming)
用于事务处理、日志管理等,动态加入在模块加入业务逻辑,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring bean作用域
- singleton 单例模式,唯一bean(Spring默认)
- prototype 原型模式,每次请求都会创建一个新的 bean 实例
- request 每一次http请求都会产生一个新的bean,该bean仅在当前HTTP请求内有效
- session 每一次http请求都会产生一个新的 bean,该bean仅在当前 http session 内有效。
- global-session 全局作用域
将对象声明为Spring Bean的注解
- @Component 通用的注解,如果不知道bean属于哪一层是可以使用此注解
- @Repository 对应持久层,即Dao层或Mapper层
- @Service 对应于服务层
- @Controller 对应 Spring MVC 控制层,即controller层
Spring事务
- 编程式事务
- 声明式事务(基于XML/注解的声明式事务)
Spring事务隔离级别
- DEFAULT :默认隔离级别,Mysql 默认采用REPEATABLE_READ隔离级别
- READ_UNCOMMITTED读取未提交,最低隔离级别,可能会造成脏读、不可重复读、幻读
- READ_COMMITTED读取已提交,可解决脏读
- REPEATABLE_READ可重复读,可解决脏读和不可重复读
- SERIALIZABLE 串行化,最高隔离级别,可解决脏读、不可重复读以及幻读
Spring事务传播行为
- REQUIRED 当前存在事务则加入该事务,如果没有则创建新的事务
- REQUIRES_NEW 创建新的事务,如果当前有事务,则挂起当前事务
- SUPPORTS 如果当前有事务则加入该事务,如果当前没有事务则已非事务的方式继续运行
- NOT_SUPPORTED 以非事务方式运行,如果当前存在事务,则把当前事务挂起
- MANDATORY 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常
- NEVER 以非事务方式运行,如果当前有事务则跑出异常