用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!

时间: 2024-10-01 04:55:42

用Spring Boot颠覆Java应用开发的相关文章

Spring Boot 针对 Java 开发人员的安装指南

Spring Boot 可以使用经典的开发工具或者使用安装的命令行工具.不管使用何种方式,你都需要确定你的 Java 版本为 Java SDK v1.8 或者更高的版本.在你开始安装之前,你需要确定你当前安装的 Java 版本满足系统运行的需要. 你可以使用下面的命令进行查看: $ java -version 如果你是 Java 项目开发的新手或者你希望实践使用 Spring Boot.你应该使用 Spring Boot 命令行工具(Spring Boot CLI),否则的话,请阅读有关经典安装

Spring Boot基础6-web应用开发-模板引擎FreeMarker

原文视频参考:http://www.roncoo.com/course/view/c99516ea604d4053908c1768d6deee3d 一.spring boot的web应用开发,是基于spring mvc 二.Spring boot 在spring默认基础上,自动配置添加了以下特性: 1.   包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans. 2.   对静态资源的支持,包括对WebJars的支持. 3.  

Spring Boot基础7-web应用开发-模板引擎Thymeleaf

原文视频参考:http://www.roncoo.com/course/view/c99516ea604d4053908c1768d6deee3d 一.spring boot的web应用开发,是基于spring mvc 二.Spring boot 在spring默认基础上,自动配置添加了以下特性: 1.   包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans. 2.   对静态资源的支持,包括对WebJars的支持. 3.  

IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评

第1章 课程概览介绍课程目标.开发内容.功能划分.开发顺序,开发所需要的前置知识及环境准备,并且介绍了与课程相关的前后端分离的思想,架构演进过程.1-1 课程导学1-2 功能划分和开发流程1-3 原料准备1-4 武功秘籍 第2章 开发准备演示前端工程环境搭建以及启动步骤,介绍了后台工程初始SSM框架目录结构,将前后端打通,并将后台管理使用的界面原型加入后台工程中,形成一个完整可用的前后台联动的原型.拓展的谈了谈HTTP API和RESTFul API的趣闻.2-1 HTTP API和RESTfu

Spring Boot加速Java web项目的开发

软件152唐伟 我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用gradle来构建的话基本也一样)然后新建Spring相关的xml文件,而且往往那些xml文件还不会少.然后继续使用tomcat或者jetty作为容器来运行这个工程.基本上每次创建一个新的项目都是这么一个流程,而我们有时候仅仅想快速的创建一个Spring web工程来测试一些东西,或

Spring Boot 使用Java代码创建Bean并注册到Spring中

从 Spring3.0 开始,增加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式不同点在于: 前两种Xml和Annotation的配置方式为预定义方式,即开发人员通过 XML 文件或者 Annotation 预定义配置 bean 的各种属性后,启动 Spring 容器,Spring 容器会首先解析这些配置属性,生成对应都?Bean Definition,装入到 DefaultL

Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执行sql时,总会提示表不存在. 寻找之后发现, 建表时,表统一采用了大写.hibernate会把大写统一转换成小写.且 mysql在 linux下 大小写敏感. 解决: 1. 尝试修改mysql的cnf文件,改成不区分大小写.修改完成之后发现问题并没有解决,还产生了新的问题,表名无论大小写都失败了. 2. 数据库层面修改没有效果, 表结构和表名不能修改,那只能通过代码实现来解决此问题了. 先感谢  三个博

干货分享:ASP.NET CORE(C#)与Spring Boot MVC(JAVA)异曲同工的编程方式总结

目录 C# VS JAVA 基础语法类比篇: 一.匿名类 二.类型初始化 三.委托(方法引用) 四.Lambda表达式 五.泛型 六.自动释放 七.重写(override) ASP.NET CORE VS Spring Boot 框架部署类比篇: 一.引用依赖(包) 二.依赖注入 DI (IOC容器) 三.过滤器.拦截器 AOP 四.配置读取 五.发布.部署.运行 我(梦在旅途,http://zuowj.cnblogs.com; http://www.zuowenjun.cn)最近发表的一篇文章

Spring Boot MongoDB JPA 简化开发

使用SpringBoot提供的@Repository接口,可以完成曾经需要大量代码编写和配置文件定制工作.这些以前让新手程序员头疼,让有经验的程序员引以为傲的配置,由于框架的不断完善,变得不那么重要,同时,也提升了程序员的工作效率. 本文介绍的是如何通过springboot操作MongoDB. 一.先配置pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin