Spring简介
Spring的核心设计思想是在Rod Johnson所著的《Expert One-On-One J2EE Development and Design》中被首次提出。Spring发布以后极大地减少了软件 开发的复杂性,使得人们可以将精力和脑力集中到业务层面上去,简单便捷地进行开发。IOC、AOP的实现使得Spring成为Java开发中最受欢迎的的框架,被广泛使用在各种各样的Java应用中。
Spring虽然功能功能强大,但是打包后大小仅1000KB左右,使用极其方便,并且Spring项目的业务对象完全不依赖与Spring中特定类,也无需实现Spring中特定接口,也就是说用户代码不需要引入框架信息,只需要通过配置完成依赖注入以后就可以使用Spring框架。控制反转是Spring的重要思想之一,Spring其他的模块也在此基础上完成,它将原本由应用程序自己把控的对象生命周期和对象间的关系维护交由第三方Spring框架来控制,这样可以极大解放应用程序,应用程序如果需要使用对象,直接取和使用,至于对象怎么创建和维护的则完全不用关心,Spring是通过DI的方式来实现的IOC,每个对象都会被放到Map中管理,等待被获取使用,在Spring中有多个Map用于存放对象。面向切片编程是Spring的另外一个重要思想,在OOP的纵向问题基础上,引入一个Java文件中处理,通常会使用注解来实现此过程,可以进一步提升代码的复用性和可维护性,降低模块之间的耦合。
SpringMVC框架
MVC是一种著名的混合型设计模式,利用分层思想将模型层、视图层、控制层隔离。SpringMVC是MVC框架的一种,相比于其他的MVC框架,如Struts2,SpringMVC对MVC模式的应用更加标准,且零配置,直接servlet上扩展,灵活性更好,这些优点使得SpringMVC更加具有推广性和复用性。目前,SpringMVC已经成为应用最广的框架之一。
SpringMVC工作流程如图所示。
- 前置控制器收到前端调用;
- 通过URL-pattern进行筛选,如果不存在则检验是否配置了default-server-handler,配置了就跳转到目标资源,否则404;如果存在则调用请求处理映射器。
- 获取调用处理执行链对象,得到素有链路;
- 获取适配器对象;
- 具体的执行步骤,通过拦截器中的设置,先完成前置方法,在完成目标方法,得到ModelAndView,最后完成后置方法;
- 若在执行过程中出现错误,则新ModelAndView由组件生成;
- 不存在异常,则由视图解析器处理,生成实际的View;
- 渲染视图,调用拦截器的afterCompletion方法;
- 前端调用过程全部完成,将最总结果返回;
SpringBoot框架
SpringBootl35]是2014年4月发布的全新开源轻量级框架,由Pivotal团队研发。其是在Spring 基础上进行设计,不仅保留了Spring框架的优秀特性,还极大地简化了配置,使得Spring 发展后期应用搭建和开发过程中,配置管理复杂重复性配置多等问题得到了解决,并且 SpringBoot通过集成大量常用框架,使得依赖包版本冲突、引用版本不稳定等问题得到了很好地解决。SpringBoot有两个重要的原则:开箱即用(Outofbox)和约定优于配置( Convention overconfiguration)[36]。
开箱即用是指在开发过程中,SpringBoot项目可以在官网直接创建生成,打包成ZIP文件下载,导入 IDE中即可使用。在创建的maven项目中只需要在pom文件中添加相关的“starter”依赖,就可以自动下载需要的所有依赖,这样可以简化 pom 文件,减少程序员依赖查找、依赖添加、排除包、版本冲突的工作。SpringBoot内置大量配置类,这些配置类内部有注解会自动判断classpath中是否存在加载自己所需要的那个类,以决定是否自动加载某个配置。SpringBoot自带大量插件和jetty、tomcat 等Servlet容器,解决了配置文件散落在项目不同文件目录中,导致管理困难的问题。另外,通过Application.java文件统一启动各种项目,解决了以往不同类型项目,不同启动方式的问题。这些特点使得程序员可以聚焦于业务逻辑上,极大地减少了在环境配置中消耗的时间,提升工作效率和产出。
约定优于配置,是一种软件设计范式。其思想是在系统架构中,直接设置初始值,使用者依据此初始值直接使用,无须额外设置[37I。SpringBoot在以下几个方面做了约定工作:1、项目的文件结构。资源和配置文件默认发在resources文件夹下,编译生成的类默认放在 targe文件夹下。2、SpringBoot配置文件唯一且名称默认必须为application,后缀为yml或properties。3、SpringBoot对大量常用的配置信息都限定了命名,如数据库连接、端口号、请求路径等。4、当导入spring-boot-starter-web后,就约定该项目是web项目,会约定使用SpringMVC,默认启动方式会使用内置的tomcat,可配置为其他servlet服务器。5、SpringBoot约定MAVEN依赖,以starter的形式导入,可以极大减少依赖数目。