使用Java作Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到如今如此多的框架,库以及整个生态系统。通过这么长时间的发展,Java做为一个成熟的语言,也演化出了很是成熟的生态系统,这也是许多公司采用Java做为主流的语言进行服务器端开发的缘由,也是为何Java一直保持着很是活跃的用户群。然而这个生态系统纷繁复杂,一个很是简单的Java Web应用程序都有可能应用到如下技术:html
Java开发分为两个阵营,一个是由Oracle 为表明的Java EE阵营,这是Web开发的官方参考标准。其中核心技术主要有Servlet, EJB, JMS, JSF, JDBC/JPA, JAXB, JAX-WS等。另外一个阵营则是由开源社区以及Pivotal表明的Spring阵营,其中核心技术主要有 Spring Framework, Spring MVC, Spring Data, Spring Security等等。java
Spring从最开始做为依赖注入的Bean container,逐渐发展为Java应用开发的主流框架。Java EE由于其臃肿,复杂,难以使用的结构,被不少Java程序员抛弃。从Java EE6开始才引入了CDI (Context Dependency Injection),并且Java EE 的设计思想很是学术化, Gavin King等人脱离了工业界的需求,使得Java EE开发很是复杂。JSF甚至为Java之父James Gosling诟病。相反在Spring社区,愈来愈多现代化的应用开发方法被融入进来,造成不一样的Spring项目。程序员
Spring Boot即是一个社区反馈推进的项目. Spring Boot能够说是至少近5年来Spring乃至整个Java社区最有影响力的项目之一。Spring Boot主要包含如下特性:flask
直接嵌入Tomcat, Jetty或者Undertow做为Servlet container。今后以后不再用将应用程序打包成war而后上传到application server里面了。服务器
提供了starter POM, 可以很是方便的进行包管理, 很大程度上减小了jar hell或者dependency hellapp
自动进行Spring框架的配置,节省程序员大量的时间和精力,可以让程序员专一在业务逻辑代码的编写上框架
不须要任何第三方系统, Spring Boot自带了能够用于生产环境的程序状态信息和健康状态。同时可让应用程序很是方便的读取外部的配置信息函数
彻底不须要任何代码的自动生成。更不须要用xml来进行框架的配置工具
为何说Spring Boot是颠覆性的呢?由于它完全改变了Java应用开发的模式。以往咱们作Spring应用开发,要知道配置哪些类来让Hibernate和Spring一块儿工做,要知道如何配置view resolver来控制哪一个模版进行视图层的展现。常常写了一大堆代码以后发现只是在处理Spring框架自己的配置,根本一行业务逻辑都没有写。开发完成以后,咱们还要考虑部署的问题,且不说部署到很是笨重的应用服务器,好比WebSphere, Weblogic或者JBoss,即便部署到Tomcat或者Jetty这种轻量级容器上面,咱们要知道如何配置容器,如何修改配置文件等等。并且在多应用部署到同一个Tomcat的时候,常常会出现冲突。就算咱们花了很大力气解决了这些问题,程序部署成功以后,咱们很难去了解这个程序的运行状态。有可能咱们要配置不少第三方工具来去知道这个应用程序运行状态如何,有哪些参数,环境变量是什么。尽管Spring帮咱们解决了依赖注入的问题,简化了一些MVC的流程,可是Spring框架自己集成了愈来愈多东西,致使其愈来愈难配置,维护成本成直线上升。不少时候Java程序员们看到Python, Ruby或者JavaScript程序员敲几个命令安装一些库,而后简单的敲几行代码,引入一些框架好比flask,而后直接一个简单的API就能够跑起来了。这时候Java程序员可能还在研究该使用Maven里面的哪一个库,如何在代码里面进行配置呢。你们内心的表情确定是这样:设计
(求此时Java程序员心理阴影面积)
Java程序员扬眉吐气的时候到了!
接下来我会经过具体例子对比传统的Spring应用开发和Spring Boot应用开发。假如咱们开发一个Hello World的REST API,传统的Spring开发应该这么作.
1. 若是使用Maven进行包管理,编写pom.xml 以下
如上能够看到为了编写简单的hello world REST API咱们引入了Spring Core, Spring Web, Spring Web MVC, Java Servlet and Jackson这么多包依赖。能够想象复杂一点的程序这个pom会变成什么样。。。
2. 编写HelloWorldInitializer class以下
这个已是很是简单的Java Config了,在Servlet 3.0以前用XML配置Spring的小伙伴们如今估计已经崩溃。
3. 编写HelloWorldConfiguration class
注意到咱们这个类里面一行业务逻辑都没有哦。。。
4. 真正开始编写HelloWorldRestController
5. 下载Tomcat
6. 打包部署到Tomcat上
7.访问localhost:8080/HelloWorld, 你终于看到了Hello World…
写到这里我已经累觉不爱了。。。
接下来Java老司机会带领大家感觉一下Spring Boot的魅力:
1. 编写pom.xml
注意到咱们只引入了一个包依赖,而且版本什么的就随他去吧
2. 编写main 函数
咱们在这里标记HelloWorldDemoApplication class为SpringBootApplication, Spring Boot 在后台会根据这个标记进行不少自动配置,好比配置MVC,配置包扫描,注入必要的类,注入自动配置的类等等。
这里的main函数是一个java标准的main函数,这个至关于应用程序入口,servlet container会在启动的时候找到这个入口,启动Spring container,完成初始化。
3. 编写HelloWorldRestController
4. 直接启动应用程序,不须要部署
5. 访问就能够直接看到Hello World了
以前HelloWorld程序对于新手来讲至少要花个10-20分钟之类的,有了SpringBoot, 最多3分钟以内搞定HelloWorld不是梦。
总结
这里我只是简单的对SpringBoot进行了讲解,SpringBoot有很是多值得深刻讨论的东西,它不只让咱们作Java开发变的简单有效,更重要的是SpringBoot完全颠覆了咱们对Java开发的认识,让咱们第一次有了”原来Java开发能够这么作” 的感受。有了SpringBoot以后,Java程序员能够更专一于业务逻辑,进行更敏捷的开发。