前言:简单的来说,我们可以将Spring Boot看做一个启动、配置、快速开发的辅助框架,其本身针对的则是微服务。Spring Boot只是为了提高我们的开发效率,是为了提升生产力,但是在一个web项目的开发当中,MVC的开发模式还是必不可少的。
目录
一、Spring
二、Spring MVC
三、Mybatis
四、总结
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
Spring 是一个分层的 JavaSE/EE Full-Stack(一站式) 轻量级开源框架。经典的 MVC 三层结构为表现层、业务层、持久层,Web表现层负责页面数据显示、页面跳转调度,例如 JSP/Servlet、SpringMVC;Service业务层负责业务处理、功能逻辑和事务控制,例如 Service、JavaBean、EJB;而持久层Dao则负责数据存取和封装,及与数据库打交道,例如 JDBC、Hibernate、Mybatis
Spring的一站式则是指JavaEE的每层都提供了解决方案,
Spring的轻量级则是从大小和开销两部分来说的。一个完整的Spring框架可以在很小的Jar包里进行发布,其所需要的处理开销也是很小的,spring的出现解决了EJB 的繁琐复杂、脱离现实的缺点。
Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。框架本身是按照设计模式构建,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。
1、Spring的结构体系
Spring框架至今已集成了20多个模块。这些模块主要包括核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。
核心容器(Core Container)包括 Core、Beans、Context、EL 模块。
Core 和 Beans 模块提供了 Spring 最基础的功能,Core 模块是核心,为其他模块提供支持,包括 Spring 的核心工具类。Beans 是 Spring 管理实体类 Bean 的主要模块,提供 IoC 控制反转和依赖注入 DI。控制反转即将控制权由原来的程序员自己管理交给 Spring 来管理,依赖注入就是注入对象实例,有四种方式,即接口注入、setter 方法注入、构造器注入和注解注入。
Context 上下文模块,主要基于 Core 和 Beans 模块,Context 模块的 Context 包继承了 Beans 包的功能,还增加了国际化(I18N)、事件传播等,Context 上下文模块,还包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Expression Language,表达式语言模块,又称 SpEL,提供了在运行期间查询和操作对象图的强大能力。包含五个主要特性:(1)使用 Bean 的 ID 引用 Bean;(2)调用方法和访问对象的属性;(3)对值进行算术,关系和逻辑运算;(4)正则表达式匹配;(5)集合操作。
2、Spring 的三大核心
Spring 的三大核心分别为 IOC(Inverse of Control 控制反转)、DI(Dependency Injection,依赖注入)和AOP(Aspect Oriented Programming 面向切面编程)。
1、IOC(Innverse Of Controller控制反转)
//IOC,即将创建对象的权利交给Spring工厂管理
Content content = new Content();
//现在可以这样去写
Content content = ContentFactory.getContent();
2、DI(Dependency Injection,依赖注入)
DI 是指在 Spring 框架创建 Bean 对象时,动态地将依赖对象注入到 Bean 组件。简单的说,就是将一个 Bean 对象动态地注入到另一个 Bean 中。DI 的做法是:由 Spring 容器创建 Service、Dao 对象,并且通过注解或配置将 Dao 传入 Servcie,那么 Service 对象就包含了 Dao 对象的引用。比如:
@Service
public class UserServiceImpl implements UserService {
@Autowired //通过注解注入UserMapper对象
private UserMapper userMapper;
}
3、AOP(Aspect Oriented Programming 面向切面编程)
AOP 采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(例如性能监视、事务管理、安全检查、缓存、日志记录等)。AOP 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强。例如可以在插入 User 对象之前进行打印日志,请看下面的代码示例。
//UserService.java
public interface UserService {
void add(User user);
}
//前置增强类 PrintLogBefore.java
//前置增强代码
public class PrintLogBefore implements MethodBeforeAdvice {
private static final Logger log = Logger.getLogger(PrintLogBefore.class);
@Override
public void before(Method method, Object[] arguments, Object target)
throws Throwable {
log.info("在插入User之前执行的方法");
}
}
//最后配置切入点
Spring MVC属于SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架(struts2)。Spring框架是高度可配置的,而且包含多种视图技术,例如jsp等。Spring MVC分离了控制器、模型对象、过滤器以及处理程序对象的角色,这样的分离使得我们更加容易的去定制。
SpringMVC 通过一套 MVC 注解,让 POJO 成为处理请求的控制器,无需任何接口,同时,SpringMVC 还支持 REST 风格的 URL 请求。此外,SpringMVC 在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。它在框架设计、扩展性、灵活性等方面全面超越了 Struts、WebWork 等 MVC 框架,从原来的追赶者一跃成为 MVC 的领跑者。
SpringMVC 框架围绕 DispatcherServlet 这个核心展开,DispatcherServlet 是前端控制器设计模式的实现,提供 Spring Web MVC 的集中访问点,负责职责的分派,而且与 Spring IoC 容器无缝集成,从而可以获得 Spring 的所有好处。
1、Spring MVC核心组件
2、Spring MVC 框架流程
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis有以下的特点:
1、Mybatis 整体架构
就目前来看,很多的公司依然使用SSH的框架来做一些项目,业务逻辑复杂但他们不在乎执行的效率。但我觉得SSM是优于SSH的,SSM和SSH框架的区别就在于SpringMVC和Struts2、MyBatis与Hibernate的比较。
1、SpringMVC 和 Struts2 比较
2、Mybatis 和 Hibernate 比较