2.1 Spring Boot概述
2.1.1 Spring及Spring MVC
1.Spring
Spring是一个开源框架,是为了解决企业级应用程序开发的复杂性而创建的。Spring主要专注于如何利用类、对象和服务组成一个企业级应用,并通过规范的方式将各种不同的组件整合成一个完整的系统。它基于依赖注入和面向方面技术,大大地降低了应用开发的难度与复杂度,提高了开发的速度,为企业级应用提供了一个有效的、轻量级的解决方案。
Spring是一个分层架构,由7个模块组成。Spring的其他模块构建在Spring Core模块之上,该模块定义了创建、配置和管理Bean的方式,如图2-1所示。
图2-1 Spring的7个模块
●Spring Core(核心容器):该模块用于提供Spring的基本功能,其主要组件是 BeanFactory。BeanFactory是工厂模式的实现,使用控制反转(IoC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
●Spring Context(上下文):该模块建立在Spring Core模块的基础上,用于向Spring 框架提供上下文信息。它提供了一种框架风格的方式来访问对象,有些类似于JNDI注册表。Context封装包继承了beans包的功能,还增加了国际化(I18N)(用于规范resource bundle)、事件传播、资源装载,以及透明创建上下文功能。
●Spring AOP(面向方面):通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring中,可以很容易地使Spring管理的任何对象支持AOP。Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
●Spring DAO:该模块提供了JDBC的抽象层,可以消除冗长的JDBC编码和解析数据库厂商特有的错误代码。并且,JDBC封装包提供了一种比编程性更好的声明性事务管理方法,不仅实现了特定接口,而且对所有的POJO都适用。
●Spring ORM:在Spring中插入了若干个ORM框架,从而提供了ORM的对象关系工具,包括JDO、Hibernate和iBatis SQL Map。所有工具都遵从Spring的通用事务和DAO异常层次结构。
●Spring Web:该模块建立在Spring Context模块之上,为基于Web的应用程序提供了上下文。因此,Spring支持与Struts的集成。Spring Web模块还简化了处理大部分请求及将请求参数绑定到域对象的工作。
●Spring Web MVC:该模块提供了Web应用的MVC实现。Spring Web MVC(简称为Spring MVC)并不仅仅提供一种传统的实现,它还在领域模型代码和Web Form之间提供了一种清晰的分离模型,并且可以借助于Spring的其他特性。
2.Spring MVC
Spring MVC是Spring的一部分,属于Spring的Web模块,是一种基于Java实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,也就是使用了MVC架构模式的思想,将Web层进行职责解耦的框架,其设计目的是帮助我们简化开发。
Spring MVC使用标注来简化Java Web的开发,并且支持RESTful风格的URL请求。该框架具有松耦合、可插拔的组件结构,比其他的MVC框架更具扩展性和灵活性。
Spring MVC是一个基于请求驱动的Web框架,并且使用了前端控制器模式来进行设计,可以根据请求映射规则将请求分发给相应的页面控制器(动作/处理器)进行处理。
1)Spring MVC工作原理
(1)启动服务器,根据web.xml文件的配置加载前端控制器(也称总控制器)DispatcherServlet。在加载时,会完成一系列的初始化动作。
(2)根据Servlet的映射请求,并参照控制器配置文件(即spmvc-servlet.xml文件),把具体的请求分发给特定的后端控制器进行处理
(3)后端控制器调用相应的逻辑层代码,完成处理并返回视图对象(ModelAndView)给前端处理器。
(4)前端控制器根据后端控制器返回的ModelAndView对象,并结合一些配置(后面有说明),返回一个相应的页面给客户端。
2)Spring MVC处理请求的流程
Spring MVC处理请求的流程如图2-2所示。
图2-2 Spring MVC处理请求的流程
(1)用户Web User发送请求至前端控制器DispatcherServlet。
(2)DispatcherServlet收到请求,将请求交给处理适配器HandlerAdapter。
(3)HandlerAdapter根据请求URL找到具体的处理器,生成处理器对象,并调用处理器Controller(也叫后端控制器)。
(4)Controller在处理完成后,返回视图对象ModelAndView给DispatcherServlet。
(5)DispatcherServlet将ModelAndView传给视图解析器ViewResolver。
(6)ViewResolver在解析后,返回具体的页面View给DispatcherServlet。
(7)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中),然后返回响应给Web User。
2.1.2 Spring Boot
Spring Boot是由Pivotal团队在2013年开始研发并于2014年4月发布第一个版本的开源的轻量级框架。它基于Spring 4.0设计,不仅继承了Spring原有的优秀特性,而且通过简化配置进一步简化了Spring应用的整个搭建和开发过程。另外,Spring Boot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
Spring Boot引入自动配置的概念,使项目配置变得更容易。Spring Boot本身并不提供Spring的核心特性及扩展功能,只是用来快速、敏捷地开发新一代基于Spring的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring紧密结合以提升Spring开发者体验的工具。同时,它集成了大量常用的第三方库,如Jackson、JDBC、Mongo、Redis、Mail等。在Spring Boot应用中,这些第三方库几乎可以零配置地实现开箱即用(out-of-thebox),因此大部分的Spring Boot应用都只需要少量的配置代码,使得开发者能够更加专注于业务逻辑。也可以说,Spring Boot是承载者,只是用来辅助开发者简化项目搭建过程的。
如果Spring Boot承载的是Web项目,并使用Spring MVC作为MVC框架,则其工作流程和Spring MVC的工作流程是完全一样的,因为这部分工作是Spring MVC做的而不是Spring Boot做的。此外,Web应用需要使用Tomcat服务器启动,而Spring Boot内置服务器容器,只需通过@SpringBootApplication注解类中的main()函数即可启动。
Spring Boot提供了4个核心功能,如下所述。
●自动配置:针对很多Spring应用程序的常见应用功能,Spring Boot能自动提供相关的配置。
●起步依赖:用户只需告诉Spring Boot需要什么功能,它就能引入需要的库。
●Spring Boot CLI:用户只需编写代码就能完成完整的应用程序,无须构建传统项目。
●Actuator:让用户深入了解运行中的Spring Boot应用程序。
上述每一个特性都能以自己的方式简化Spring应用的开发。