博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要学习 Spring Boot?
阅读量:6906 次
发布时间:2019-06-27

本文共 3601 字,大约阅读时间需要 12 分钟。

hot3.png

我们知道,从 2002 年开始,Spring 一直在飞速的发展,如今已经成为了在Java EE(Java Enterprise Edition)开发中真正意义上的标准,但是随着技术的发展,Java EE使用 Spring 逐渐变得笨重起来,大量的 XML 文件存在于项目之中。繁琐的配置,整合第三方框架的配置问题,导致了开发和部署效率的降低。

2012 年 10 月,Mike Youngstrom 在 Spring jira 中创建了一个功能请求,要求在 Spring 框架中支持无容器 Web 应用程序体系结构。他谈到了在主容器引导 spring 容器内配置 Web 容器服务。这是 jira 请求的摘录:

我认为 Spring 的 Web 应用体系结构可以大大简化,如果它提供了从上到下利用 Spring 组件和配置模型的工具和参考体系结构。在简单的 main()方法引导的 Spring 容器内嵌入和统一这些常用Web 容器服务的配置。

这一要求促使了 2013 年初开始的 Spring Boot 项目的研发,到今天,Spring Boot 的版本已经到了 2.0.3 RELEASE。Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。同时它集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box),大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于 Java 的配置),开发者能够更加专注于业务逻辑。

为什么学习Spring Boot

从Spring官方来看

我们打开 Spring 的,可以看到下图:

 

 

图0:为什么要学习Spring Boot?

 

我们可以看到图中官方对 Spring Boot 的定位:Build Anything, Build任何东西。Spring Boot旨在尽可能快地启动和运行,并且只需最少的 Spring 前期配置。 同时我们也来看一下官方对后面两个的定位:

SpringCloud:Coordinate Anything,协调任何事情;

SpringCloud Data Flow:Connect everything,连接任何东西。

仔细品味一下,Spring 官网对 Spring Boot、SpringCloud 和 SpringCloud Data Flow三者定位的措辞非常有味道,同时也可以看出,Spring 官方对这三个技术非常重视,是现在以及今后学习的重点(SpringCloud 相关达人课课程届时也会上线)。

从Spring Boot的优点来看

Spring Boot 有哪些优点?主要给我们解决了哪些问题呢?我们以下图来说明:

 

 

图1:为什么要学习Spring Boot?

 

良好的基因

Spring Boot 是伴随着 Spring 4.0 诞生的,从字面理解,Boot是引导的意思,因此 Spring Boot 旨在帮助开发者快速搭建 Spring 框架。Spring Boot 继承了原有 Spring 框架的优秀基因,使 Spring 在使用中更加方便快捷。

 

 

图2:为什么要学习Spring Boot?

 

简化编码

举个例子,比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。

org.springframework.boot
spring-boot-starter-web

我们点击进入该依赖后可以看到,Spring Boot 这个 starter-web 已经包含了多个依赖,包括之前在 Spring 工程中需要导入的依赖,我们看一下其中的一部分,如下:

org.springframework
spring-web
5.0.7.RELEASE
compile
org.springframework
spring-webmvc
5.0.7.RELEASE
compile

由此可以看出,Spring Boot 大大简化了我们的编码,我们不用一个个导入依赖,直接一个依赖即可。

 

简化配置

Spring 虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。举个例子:

我新建一个类,但是我不用 注解,也就是说,它是个普通的类,那么我们如何使它也成为一个 Bean 让 Spring 去管理呢?只需要@Configuration 和两个注解即可,如下:

public class TestService {    public String sayHello () {        return "Hello Spring Boot!";    }}import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class JavaConfig {    @Bean    public TestService getTestService() {        return new TestService();    }}

@Configuration表示该类是个配置类,表示该方法返回一个 Bean。这样就把TestService作为 Bean 让 Spring 去管理了,在其他地方,我们如果需要使用该 Bean,和原来一样,直接使用@Resource注解注入进来即可使用,非常方便。

@Resourceprivate TestService testService;

另外,部署配置方面,原来 Spring 有多个 xml 和 properties配置,在 Spring Boot 中只需要个 application.yml即可。

 

简化部署

在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。

另外,也降低对运行环境的基本要求,环境变量中有JDK即可。

 

简化监控

我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud 来配合一起使用。

 

从未来发展的趋势来看

微服务是未来发展的趋势,项目会从传统架构慢慢转向微服务架构,因为微服务可以使不同的团队专注于更小范围的工作职责、使用独立的技术、更安全更频繁地部署。而 继承了 Spring 的优良特性,与 Spring 一脉相承,而且 支持各种REST API 的实现方式。Spring Boot 也是官方大力推荐的技术,可以看出,Spring Boot 是未来发展的一个大趋势。

免费Java资料领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。

 传送门:

转载于:https://my.oschina.net/u/3728792/blog/3015250

你可能感兴趣的文章
Python语音识别终极指北,没错,就是指北!
查看>>
python脚本按表备份MySQL数据库
查看>>
【shell】Linux shell 之 打印99乘法表详解
查看>>
lvs 笔记
查看>>
实用技巧:在Linux下设置xhost方法步骤
查看>>
nio Selector 阻塞 唤醒 原理
查看>>
左旋转字符串
查看>>
整理linux平台下的vim插件配置,减少到11M,简化安装
查看>>
解决CentOS 7.0 VMware虚拟机没有网卡,配置网卡信息
查看>>
PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计...
查看>>
全局NSTimer导致的内存泄露及解决办法
查看>>
获取认证用户的相关信息 spring MVC的security模块
查看>>
Spring cloud Netflix中的超时配置
查看>>
VVDocumenter-Xcode
查看>>
System.out.printf() 格式化输出,快捷打印出当前时间
查看>>
Mysql 慢查询和慢查询日志分析
查看>>
android中listview的getView方法不调用的一种情况
查看>>
HTTP socket 类
查看>>
两个有用的宏:“禁止类成员复制”以及“禁止隐式构造”
查看>>
《分布式服务框架原理与实践》——第5章协议栈阅读笔记
查看>>