文章目录
SSM框架
SSM框架是Spring+Spring MVC+MyBatis的缩写,是标准的MVC模式,将整个系统划分为 表现层,controller层,service层,DAO层四层。
- Spring 实现业务对象管理
- Spring MVC 负责请求的转发和视图管理,其实了解之后知道了Spring MVC也是Spring框架中的一个组件
- MyBatis 是数据对象的持久化引擎
1. Spring
IoC控制反转
-
控制反转IOC: 也叫依赖注入,就是将你设计好的对象交给容器管理,而不是传统的在你的对象内部直接控制。开发过程中只需要提供配置,定义bean属性,让spring容器来生成类的对象以及管理对象。
IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过 DI(Dependency Injection,依赖注入) 来实现的。
Spring通过这种控制反转(IoC)的设计模式促进了松耦合。 -
面向切面AOP: 是一种编程思想,是面向对象OOP的补充和完善。
AOP面向切面编程
AOP最大的作用就是 解耦 :把功能性代码和非功能性代码进行解耦。没有动态代理就没有AOP。
代理模式
静态代理:比如Controller是Service的代理,Service是DAO的代理
动态代理:将一些非功能代码提取出来放到一个类里,比如事务管理器,在代码运行的时候动态的添加到需要的地方,来实现动态代码功能增强。
自己写的类:目标类
生成新类:代理类
代理类继承自目标类,父子关系(要求目标类不能被final修饰),通过Cglib
实现;
代理类实现一个跟目标类相同的接口,兄弟关系(要求目标类是实现了一个接口)。通过Jdk Proxy
实现;
2. Spring MVC
Spring MVC是Spring提供的一个web框架。
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。
M(Model,模型)就是数据,就是dao、bean;
V(View,视图)就是网页,JSP,用来展示模型中的数据;
C(Controller,控制器)作用就是把不同的数据(Model)显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。
写Spring框架
看源码:站在设计者的角度去看,先猜想后验证。
3. MyBatis
MyBatis就是对JDBC(java数据库连接)的封装,它让数据库底层操作变得透明。
是一个基于Java的持久层框架。它支持定制化SQL、存储过程以及高级映射。
mybatis的操作都是围绕一个sqlSessionFactory实例展开的。 mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。 在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。【目前所开发的项目中就是这么操作的】
MyBatis可以帮助程序员将数据存入到数据库中。是一个可以帮程序员管理数据增删改查的框架。
SSM系统架构参考
后端利用SSM框架开发一个接口的流程
- 先写实体类entity,定义对象的属性(可以参照数据库中表的字段来设置,数据库的设计应该在所有编码开始之前)。
- 写Mapper.xml(Mybatis),其中定义你的功能,对应要对数据库进行的那些操作,比如 insert、selectAll、selectByKey、delete、update等。
- 写Mapper.java,将Mapper.xml中的操作按照id映射成Java函数。【就是 DAO层,都是直接与数据库打交道,执行SQL语句的】
- 写Service.java,为控制层提供服务,接受控制层的参数,完成相应的功能,并返回给控制层。
- 写Controller.java,连接页面请求和服务层,获取页面请求的参数,通过自动装配,映射不同的URL到相应的处理函数,并获取参数,对参数进行处理,之后传给服务层。
- 写JSP页面调用,请求哪些参数,需要获取什么数据。
实际开发流程,仍然是先从Controller层开始开发,因为需要从这里开始理清业务逻辑,看你的具体业务需要什么逻辑操作,然后才开发Serve层甚至ServiceImpl,最后看有哪些需要和数据库去打交道,再写数据库相关的SQL语句。
SSM处理http请求流程
也就是后端我们写好的接口被前端调用之后,在后端中具体是怎样一个调用流程:
以一个简单的博客平台为例,当用户通过浏览器发送请求到服务端后,先由BlogController类中的方法处理,然后调用使用BlogService接口的BlogServiceImpl类,最后调用实现BlogMapper接口的BlogMapper.xml文件。