SSM
框架是由三套框架整合起来的。分别是 Spring
、Spring MVC
、Mybatis
。
Spring
是一个控制反转(IoC
)和面向切面(AOP
)的容器框架,适用于任何Java
应用。
控制反转(IoC
)是指对象的创建权交给Spring
容器,其作用是实现了程序的解耦合,对象创建的控制权不是使用者
,而是框架
或者容器
。例如:想要调用类里面一个非静态方法,首先要通过 new
实例化一个对象,然后通过这个实例调用相关的方法 method
。但是在 Spring
中,Spring
创建对象的过程,不是在代码里面实现的,而是交给 Spring
来进行配置实现的,其基本原理就是 XML配置文件+SAX解析+工厂设计模式
;
OOP
技术,允许开发者定义纵向的关系,但并不适合定义横向的关系。AOP
技术,将那些影响了多个类的公共行为封装到一个可复用模块,这个就是所谓的切面(Aspect)
。切面
是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。最常见的使用到AOP
技术就是日志功能。
- 连接点(
Joinpoint
):被拦截到的点可能是字段
、构造器
、或者方法
。Spring
只支持方法类型的连接点。 - 横切关注点:对哪些方法进行拦截,拦截后怎么处理,称之为横切关注点。
- 切面(
aspect
):类是对物体特征的抽象,切面就是对横切关注点的抽象。 - 切入点(
pointcut
):对连接点进行拦截的定义。 - ֪ͨ(
advice
):指拦截到连接点之后要执行的代码。通知分为前置
、后置
、异常
、最终
、环绕
通知五类。 - 目标对象:代理的目标对象。
- 织入(
weave
):将切面应用到目标对象并导致代理对象创建的过程。 - 引入(
introduction
):在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段。
Spring
中AOP
代理由Spring
的IoC
容器负责生成、管理,其依赖关系也由IoC
容器负责管理。因此AOP
代理可以直接使用容器中的其它bean
实例作为目标,这种关系可由IoC
容器的依赖注入提供。
Spring
创建代理的规则:
- 默认使用
Java
动态代理来创建AOP
代理,可以为任何接口实例创建代理 - 当需要代理的类不是代理接口的时候,
Spring
会切换为使用CGLIB
代理,也可强制使用CGLIB
代理。
Spring MVC
是Spring
提供的一个强大而灵活的web
框架。借助于注解,Spring MVC
提供了几乎是POJO
的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring
上下文中的其他bean,通过Spring
的依赖注入功能,这些bean
被注入到控制器中。
Spring MVC
主要由DispatcherServlet
、处理器映射
、处理器(控制器)
、视图解析器
、视图
组成。他的两个核心是两个核心:
1. 处理器映射:选择使用哪个控制器来处理请求。 2. 视图解析器:选择结果应该如何渲染。
Spring MVC
主要有四个接口,DispatcherServlet
接口、HandlerMapping
接口、Controller
接口、ViewResolver
接口。
DispatcherServlet
接口:所有的请求都有经过它来统一分发。他将请求分发给Spring Controller
之前,需要借助于Spring
提供的HandlerMapping
定位到具体的Controller
。HandlerMapping
接口:完成客户请求到Controller映射。Controller
接口:用于处理用户请求。Controller
处理完用户请求,返回ModelAndView
对象给DispatcherServlet
前端控制器,ModelAndView
中包含了模型(Model
)和视图(View
)。ViewResolver
接口:Spring
提供的视图解析器(ViewResolver
)在Web
应用中查找View
对象,从而将相应结果渲染给客户。
DispatcherServlet
DispatcherServlet
是Web
应用的控制器,是Spring MVC
的核心。它负责接收HTTP
请求组织协调Spring MVC
的各个组成部分。
- 截获符合特定格式的
URL
请求。 - 初始化
DispatcherServlet
上下文对应WebApplicationContext
,并将其与业务层、持久化层的WebApplicationContext
建立关联。 - 初始化
Spring MVC
的各个组成组件,并装配到DispatcherServlet
中。
MyBatis
是一个支持普通SQL
查询,存储过程和高级映射的优秀持久层框架(ORM
框架)。MyBatis
尽可能消除JDBC
代码和参数的手工设置以及对结果集的检索封装。MyBatis
可以使用简单的XM
L或注解
用于配置和原始映射,将接口和Java
的POJO
(Plain Old Java Objects
,普通的Java对象)映射成数据库中的记录。