用Spring Boot颠覆Java应用开发
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程序员可以更专注于业务逻辑,进行更敏捷的开发。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:184625948【长按复制】 我们一起学Java!
用Spring Boot颠覆Java应用开发的更多相关文章
- 16.用Spring Boot颠覆Java应用开发
转自:https://www.cnblogs.com/aishangJava/p/5971288.html Java开发概述: 使用Java做Web应用开发已经有近20年的历史了,从最初的Servle ...
- 读书笔记《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创建java app
利用spring boot创建java app 背景 在使用spring框架开发的过程中,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置和复杂的bean依赖关系,特别是在使用mvc的时候各 ...
- Spring Boot入门(四):开发Web Api接口常用注解总结
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序员的日常工作中,Web开发应该是占比很重的一部分,至少我工作以来,开发的系统基本都是Web端访问的 ...
- Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
(转载)Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题 这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执 ...
- ASP.NET CORE(C#)与Spring Boot MVC(JAVA)
干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结 目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方 ...
- Spring Boot 获取 java resources 下文件
Spring Boot 获取 java resources 下文件 Spring Boot 获取 resources 目录下的目录(例:获取 resources 目录下的 template 目录): ...
- (7)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Spring Boot Starter的介绍及使用
Spring Boot 的便利性体现在,它简化了很多烦琐的配置,这对于开发人员来说是一个福音,通过引入各种 Spring Boot Starter 包可以快速搭建出一个项目的脚手架推荐分布式架构源 ...
随机推荐
- 跟vczh看实例学编译原理——零:序言
在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...
- JavaScript常见原生DOM操作API总结
[TOC] 最近面试的时候被这个问题给卡了,所以抽时间好好复习一下. 几种对象 Node Node是一个接口,中文叫节点,很多类型的DOM元素都是继承于它,都共享着相同的基本属性和方法.常见的Node ...
- Ubuntu 16 安装ElasticSearch
首先安装Java,参见博客:http://www.cnblogs.com/1zhk/p/6056406.html 下载ElasticSearch安装包 curl -L -O https://artif ...
- JS实战 · 复选框全选操作
思路: 1.获取被选中checkbox,通过checked属性的状态完成: 2.获取被选中的checkbox的value值: 3.求所有value的和sum: 4.定义span区域存储和sum: ...
- Redis初级介绍
1 什么是Redis Redis(REmote DIctionary Server,远程数据字典服务器)是开源的内存数据库,常用作缓存或者消息队列. Redis的特点: Redis存在于内存,使用硬盘 ...
- spring定时任务之quartz
在Spring中,使用JDK的Timer类库来做任务调度功能不是很方便,关键它不可以象cron服务那样可以指定具体年.月.日.时和分的时间.你只能将时间通过换算成微秒后传给它.如任务是每天执行一次,则 ...
- PHP中的list()说明
list() 用于在一次操作中给一组变量赋值. 注释:list()只用于数字索引的数组,且假定数字索引从 0 开始. 说明 list() 用数组中的元素为一组变量赋值. 注意,与 array() 类似 ...
- DAC Usage2:通过DAC实现DB Schema的Migration和Upgrade
一,Introduce Extract DAC 是从现存的DB中创建DAC,抽取DB Object的definition 和 与之相关的实例级别的元素,比如Login,以及Login 和User之间的 ...
- 【Win10应用开发】协议-下篇:自定义多个协议
前面介绍了如何为应用程序自定义协议,于是有朋友会问,我希望为我的应用注册多个协议,不同的协议处理不同的事情,能吗?答案是能的. 方法主要在配置清单文件上,这里我给出一个例子,示例应用将注册两个协议,分 ...
- OpenCASCADE DataExchange DWG
OpenCASCADE DataExchange DWG eryar@163.com Abstract. DWG is a file format created in the 70’s for th ...