从Servlet技术到Spring和Spring MVC,开发Web应用变得愈来愈简捷。可是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深入体会到这一痛苦。由于即便是开发一个Hello-World的Web应用,都须要咱们在pom文件中导入各类依赖,编写web.xml、spring.xml、springmvc.xml配置文件等。web
特别是须要导入大量的jar包依赖时,咱们须要在网上查找各类jar包资源,各个jar间可能存在着各类依赖关系,这时候又得下载其依赖的jar包,有时候jar包间还存在着严格的版本要求,,因此当咱们只是想开发一个Hello-World的超简单的Web应用时,却把极大部分的时间在花在了编写配置文件和导入jar包依赖上,极大地影响了咱们的开发效率。spring
因此为了简化Spring繁杂的配置,Spring Boot应运而生。正如Spring Boot的名称同样,一键启动,Spring Boot提供了自动配置功能,为咱们提供了开箱即用的功能,使咱们将重心放在业务逻辑的开发上。sql
那么Spring Boot又是怎么简化Spring MVC的呢?Spring Boot和Spring、Spring MVC间又是怎样的关系呢?Spring Boot又有什么新特色呢?缓存
接下来,让咱们走进Spring MVC 到Spring Boot的简化之路,或许你就能找到这些答案。服务器
Spring Boot和Spring、Spring MVC不是竞争关系,Spring Boot使咱们更加容易使用Spring和Spring MVC架构
Spring FrameWork解决的核心问题是什么 Spring框架的最重要特性是依赖注入,全部的Spring模块的核心都是依赖注入(DI)或控制反转(IOC)。为何很重要呢,由于当咱们使用DI或IOC时,咱们可使应用获得解耦。咱们来看一个简单的例子:并发
没有依赖注入的例子:mvc
使用依赖注入的例子:app
1. 重复代码框架
Spring框架中止了依赖注入(DI)吗?没有,它在依赖注入(DI)的核心概念上开发了许多Spring模块:
Spring JDBC
Spring MVC
Spring AOP
Spring ORM
Spring Test
...
考虑一下Spring JDBC,这些模块带来了新功能吗?并无,咱们彻底可使用Java代码完成这些工做。那么,它们给咱们带来了什么?它们带来了简单的抽象,这些简单抽象的目的是:
减小样板代码/减小重复
促进解耦/增长单元可测性 例如:与传统的JDBC相比,咱们使用Spring JDBC须要编写的代码减小了许多。
2. 与其余框架良好的集成
Spring框架并不尝试去解决已经解决了的问题,它所作的一切就是提供与提供出色解决方案的框架的完美集成。
Hibernate
IBatis
JUnit
...
Spring MVC框架解决的核心问题是什么 Spring MVC框架提供了开发Web应用的分离方式。经过DispatcherServlet、ModelAndView、View Resolver等简单概念,是Web应用开发变得更加简单。
基于Spring的应用程序有不少配置。当咱们使用Spring MVC时,咱们须要配置组件扫描,调度器servlet,视图解析器等:
Spring Boot解决的问题
1. Spring Boot 自动配置
Spring引入了新的思惟过程:咱们能够变得更加智能些吗?当一个spring mvc jar包被添加到应用程序时,咱们是否能够自动配置一些bean?
当Hibernate jar包在类路径时,自动配置数据源怎样?
当Spring MVC jar包在类路径时,自动配置Dispatcher Servlet怎样?
Spring Boot查看ClASSPATH上对于本应用程序须要编写配置的框架,基于这些,Spring Boot提供了这些框架的基本配置-这就是自动配置。
2. Spring Boot Starter Projects
假设咱们想开发一个Web应用程序。首先,咱们须要肯定咱们想要使用的框架,使用哪一个版本的框架以及如何将它们链接在一块儿。全部Web应用程序都有相似的需求 下面列出的是咱们在Spring MVC中使用的一些依赖关系。这些包括Spring MVC,Jackson Databind(用于数据绑定),Hibernate-Validator(用于使用Java验证API的服务器端验证)和Log4j(用于日志记录)。在建立时,咱们必须选择全部这些框架的兼容版本:
什么是Starter
咱们来看Starter的一个示例 - Spring-Boot-Starter-Web
如下屏幕截图显示了添加到咱们的应用程序中的不一样依赖关系:
任何典型的Web应用程序都会使用全部这些依赖项.Spring Boot Starter Web预先打包了这些。做为开发人员,咱们不须要担忧这些依赖关系或兼容版本。
3. Spring Boot Starter项目选项
正如Spring Boot Starter Web同样,Starter项目帮助咱们快速入门开发特定类型的应用程序:
spring-boot-starter-web-services - SOAP Web服务
spring-boot-starter-web - Web和RESTful应用程序
spring-boot-starter-test - 单元测试和集成测试
spring-boot-starter-data-jpa - 带有Hibernate的Spring Data JPA
spring-boot-starter-cache - 启用Spring Framework的缓存支持
...
前面已经初步介绍过,在这里详细介绍一下。
当咱们启动Spring Boot应用程序时,咱们能够在日志中看到一些重要的消息。
上面的日志语句显示了Spring Boot Auto Configuration的行为。
一当咱们在应用中添加了Spring Boot Starter Web依赖,Spring Boot AutoConfiguration就会发现Spring MVC在类路径下,它会自动配置dispatcherServlet,一个默认的错误页面和webjars。
若是你添加了Spring Boot DataJPA Starter依赖,Spring Boot AutoConfiguration会自动配置数据源(datasource)和实体管理器(Entity Manager)
全部的自动配置逻辑都在spring-boot-autoconfigure.jar中实现。mvc、data和其余框架的全部自动配置逻辑都存在与一个jar包中。
spring-boot-autoconfigure.jar中重要的文件是/META-INF/spring.factories,该文件;列出了在EnableAutoConfiguration key下启动的全部自动配置类。下面列出一些重要的配置类:
打开调试日志
在application.properties打开调试日志:
当启动程序时,会打印自动配置日志信息
Spring Boot的出现自己就是为了减低Web开发的门槛,使开发人员可以专一于业务开发,而不需浪费时间在业务开发以外,至此Spring MVC到Spring Boot的简化之路到此结束。
欢迎工做一到五年的Java工程师朋友们加入Java架构开发: 855835163 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用本身每一分每一秒的时间来学习提高本身,不要再用"没有时间“来掩饰本身思想上的懒惰!趁年轻,使劲拼,给将来的本身一个交代!