Spring
Spring原理
是一个轻量级的控制反转(IOC)和面向切面(AOP)的容量框架。
控制反转(IOC)
spring通过一种控制反转(ioc)的技术促进了耦合性
面向切面(AOP)
spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。
AOP(面向切面编程),可以说是OOP(面向对象编程)的补充和完善。OOP引入封装、继承和多态等概念来建立一个对象层次结构,用以模拟公共行为的一个集合。
当我们需要分散的引入公共行为时,OOP则是无能为力。也就是说,OOP允许你定义从上到下的关系,但是不能定义从左到右的关系。例如日志功能。
日志代码往往水平的散布在所有对象层次中,而与它所散步到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性等也是如此。这种散布在各处的无相关的代码被称为横切
代码。
AOP技术利用一种称为 “横切” 的技术,解剖开封装的对象内部,并将那些影响多个类的公共 行为封装到一个可重用模块,命名为 “Aspect" ,即切面。
简单来说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,有利于未来的可操作性和可维护性。
Spring模块
核心容器、数据访问/集成、Web、AOP、工具、消息和测试模块。
Spring常用的注入方式
Spring通过DI(依赖注入)实现IOC(控制反转),常用方法主要三种:
- 构造方法注入
- setter注入
- 基于注解的注入
Spring支持几种bean的作用域
当通过spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域
- singleton:单例模式,在整个Spring IOC容器中,使用singleton定义的Bean将只有一个实例。
- prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例。
- request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效。
- session:对于每次HTTP Session,使用session定义的Bean对象产生一个新实例。只有在Web应用中使用Spring时,该作用域才有效。
spring 自动装配 bean 的方式
spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系。
spring中bean装配有两种方式:
- 隐式的bean发现机制和自动装配机制
- 在java代码或者XML中进行显示配置
spring 事务实现方式有哪些?
- 编程式事务管理,需要在代码中调用
beginTransaction()
、commit()
、rollback()
等事务管理相关的方法。 - 基于 TransactionProxyFactoryBean 的声明式事务管理
- 基于@Transational 的声明式事务管理
- 基于 Aspectj AOP 配置事务
spring 的事务隔离
事务隔离级别指的的是一个事务对数据的修改与另一个并行的事务的隔离程度,当多个事务同时访问相同数据时,如果没有采取必要的隔离机制,就可能发现以下问题:
- 脏读:一个事务读到另一个事务未提交的更新数据。
- 幻读:例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。
- 不可重复读:比方说在同一个事务中先后执行两条一模一样的select语句,期间在此次事务中没有执行过任何DDL语句,但先后得到的结果不一致,这就是不可重复读。
springMVC 运行流程
运行流程图:
spring 具体工作原理:
- 客户端用户发送请求至前端控制器DispatcherServlet。
- DispatcherServlet收到请求调用HandlerMapping处理器映射器。
- HandlerMapping处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
- DispatcherServlet调用HandlerAdapter处理器适配器,HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller控制器执行完成返回ModelAndView,HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
- DispatcherServlet前端控制器将ModelAndView传给ViewReslover视图解析器。
- ViewReslover解析后返回具体View。
- DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),并返回给客户端用户
springMVC 的核心组件
- DispatcherServlet:中央控制器,把请求转发到具体的控制类
- Controller:具体处理请求的控制器
- HandlerMapping:映射处理器,负责映射中央处理器转发给Controller时的映射策略
- ModelAndView:服务层返回的数据和视图层的封装类
- ViewResolver:视图解析器,解析具体的视图
- Interceptors:拦截器,负责拦截定义的请求,然后做处理工作