16.用Spring Boot颠覆Java应用开发
转自:https://www.cnblogs.com/aishangJava/p/5971288.html
Java开发概述:
使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这也是许多公司采用Java作为主流的语言进行服务器端开发的原因,也是为什么Java一直保持着非常活跃的用户群。然而这个生态系统纷繁复杂,一个非常简单的Java Web应用程序都有可能应用到以下技术:

Java开发分为两个阵营,一个是由Oracle 为代表的Java EE阵营,这是Web开发的官方参考标准。其中核心技术主要有Servlet, EJB, JMS, JSF, JDBC/JPA, JAXB, JAX-WS等。另一个阵营则是由开源社区以及Pivotal代表的Spring阵营,其中核心技术主要有 Spring Framework, Spring MVC, Spring Data, Spring Security等等。
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便是一个社区反馈推动的项目. Spring Boot可以说是至少近5年来Spring乃至整个Java社区最有影响力的项目之一。Spring Boot主要包含以下特性:
直接嵌入Tomcat, Jetty或者Undertow作为Servlet container。从此之后再也不用将应用程序打包成war然后上传到application server里面了。
提供了starter POM, 能够非常方便的进行包管理, 很大程度上减少了jar hell或者dependency hell
自动进行Spring框架的配置,节省程序员大量的时间和精力,能够让程序员专注在业务逻辑代码的编写上
不需要任何第三方系统, Spring Boot自带了可以用于生产环境的程序状态信息和健康状态。同时可以让应用程序非常方便的读取外部的配置信息
完全不需要任何代码的自动生成。更不需要用xml来进行框架的配置
为什么Spring Boot是颠覆性的?
为什么说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应用开发
接下来我会通过具体例子对比传统的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程序员可以更专注于业务逻辑,进行更敏捷的开发。
16.用Spring Boot颠覆Java应用开发的更多相关文章
- 用Spring Boot颠覆Java应用开发
Java开发概述: 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统.经过这么长时间的发展,Java作为一个成熟的语言, ...
- 读书笔记《Spring Boot实战 —— Java EE 开发的颠覆者》
Spring框架是轻量级的企业级开发一站式解决方案 Spring使用简单的POJO Plain Old Java Object 无限制的普通Java对象 Spring Framework Runtim ...
- Spring Boot 针对 Java 开发人员的安装指南
Spring Boot 可以使用经典的开发工具或者使用安装的命令行工具.不管使用何种方式,你都需要确定你的 Java 版本为 Java SDK v1.8 或者更高的版本.在你开始安装之前,你需要确定你 ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...
- 利用spring boot创建java app
利用spring boot创建java app 背景 在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各 ...
- ASP.NET CORE(C#)与Spring Boot MVC(JAVA)
干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结 目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方 ...
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...
随机推荐
- Git 远程仓库默认权限问题的解决
多人共同开发维护一个项目时,对整个项目文件互有拉取.推送等行为.为防止操作时文件权限出现冲突,可有以下2种方法解决: 1. 本地git的远端设置中,连接远程仓库时多人使用同一个用户名,该用户名为git ...
- Swift学习笔记(5)--数组
数组的下标从0开始计数,相关方法属性涉及到下标时也从0开始计数 1.定义: //1.可变数组 var cityArray = ["Portland","San Franc ...
- JQ遍历 input 并修改name属性
1.执行完克隆行后,会出现name属相相同的问题 function addRow(){ var obj = $("tr[name='info']:last"); var objCl ...
- CentOS 7上安装gitlab-runner
1.yum install gitlab-runner -y 2.Registering Runners a.Run the following command: gitlab-runner regi ...
- cogs 49. 跳马问题
49. 跳马问题 ★ 输入文件:horse.in 输出文件:horse.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 有一只中国象棋中的 “ 马 ” ,在半张 ...
- Eclipse上开发IBM Bluemix应用程序
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要解说了怎样使用安装EclipseIBM Bluemix插件.并在Eclipse ...
- js---12对象创建方式,构造器,原型
<script type="text/javascript"> var o = {}; var o1 = new Object();//这2种方式创建对象是一样的,因为 ...
- Android学习笔记之图像颜色处理(ColorMatrix)
对图像进行颜色方面的处理,通过使用颜色矩阵(ColorMatrix)来实现.从而可以达到很多特效如黑白老照片.泛黄旧照片等等. 1.颜色矩阵(ColorMatrix) 这里有详细的介绍:http:// ...
- H265(HEVC) nal 单元头介绍及rtp发送中的fu分组发送详解
首先来介绍下h265(HEVC)nal单元头,与h264的nal层相比,h265的nal unit header有两个字节构成,如下图所示: 从图中可以看出hHEVC的nal包结构与h264有明显的不 ...
- EF搭建数据库
http://blog.csdn.net/mss359681091/article/details/52135867http://blog.csdn.net/x_craft/article/detai ...