现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下。

Spring Boot 的背景

了解 Spring Boot 必须先说说 Spring 框架!

在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大。

用过 Spring 框架的都知道 Spring 能流行是因为它的两把利器:IOC 和 AOP,IOC 可以帮助我们管理对象的依赖关系,极大减少对象的耦合性,而 AOP 的切面编程功能可以更方面的使用动态代理来实现各种动态方法功能(如事务、缓存、日志等)。

而要集成 Spring 框架,必须要用到 XML 配置文件,或者注解式的 Java 代码配置。无论是使用 XML 或者代码配置方式,都需要对相关组件的配置有足够的了解,然后再编写大量冗长的配置代码。

然后又有多少开发人员能精通这些配置呢?如果我们只提供一些配置参数让框架能自动配置这些组件,那是不是 so easy?

基于简化 Spring 快速上手为目的,Spring Boot 框架诞生了!

什么是 Spring Boot?

Spring Boot是 Spring 开源组织下的一个子项目,也是 Spring 组件一站式解决方案,主要是为了简化使用 Spring 框架的难度,简省繁重的配置。

Spring Boot提供了各种组件的启动器(starters),开发者只要能配置好对应组件参数,Spring Boot 就会自动配置,让开发者能快速搭建依赖于 Spring 组件的 Java 项目。

Spring Boot不但能创建传统的 war 包应用,还能创建独立的不依赖于任何外部容器(如:tomcat)的独立应用,使用 java -jar 命令就能启动。同时,Spring Boot也提供了一个命令行工具来执行 Spring 的脚本。

Spring Boot 的官方网站:

https://projects.spring.io/spring-boot/

Spring Boot 的源码:

https://github.com/spring-projects/spring-boot

Spring Boot 的设计目标

如果你不清楚 Spring 是干嘛用的,那再来看看设计它的目标和初衷是什么!

●  为 Spring 应用开发提供一个更快、更容易上手的入门体验;
 ●  提供一系列在大型项目中经常用到的公共的非功能性特性,如:内嵌入服务器、安全、度量指标、健康检测、外部化配置;
 ●  零代码配置生成及零 XML 配置;

Spring Boot 为什么能这么火?

Spring Boot 为什么能这么火?是因为它有以下几个特色。

1、独立运行

Spring Boot内嵌了各种 Servlet 容器,Tomcat、Jetty等,现在不再需要打成 war 包部署到容器中,Spring Boot 只要打成一个可执行的jar包就能独立运行,所有的依赖包都在一个 jar 包内。

2、简化 Maven 配置

如上图所示,现在只要依赖 spring-boot-starter-web 启动器包,它包含所有 web 开发所有的依赖,就能拥有 Spring Web 的能力,极大简少了 maven 对依赖的配置。

使用 Maven 命令:mvn dependency:tree 也可以看到完整的依赖树:

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:2.0.1.RELEASE:compile

[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:2.0.1.RELEASE:compile

[INFO] |  |  +- org.springframework.boot:spring-boot:jar:2.0.1.RELEASE:compile

[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.1.RELEASE:compile

[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.1.RELEASE:compile

[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.2.3:compile

[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.2.3:compile

[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.10.0:compile

[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.10.0:compile

[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile

[INFO] |  |  +- javax.annotation:javax.annotation-api:jar:1.3.2:compile

[INFO] |  |  \- org.yaml:snakeyaml:jar:1.19:runtime

[INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:2.0.1.RELEASE:compile

[INFO] |  |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.9.5:compile

[INFO] |  |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile

[INFO] |  |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.9.5:compile

[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.9.5:compile

[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.9.5:compile

[INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.9.5:compile

[INFO] |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:2.0.1.RELEASE:compile

[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.29:compile

[INFO] |  |  +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.29:compile

[INFO] |  |  \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.29:compile

[INFO] |  +- org.hibernate.validator:hibernate-validator:jar:6.0.9.Final:compile

[INFO] |  |  +- javax.validation:validation-api:jar:2.0.1.Final:compile

[INFO] |  |  +- org.jboss.logging:jboss-logging:jar:3.3.2.Final:compile

[INFO] |  |  \- com.fasterxml:classmate:jar:1.3.4:compile

[INFO] |  +- org.springframework:spring-web:jar:5.0.5.RELEASE:compile

[INFO] |  |  \- org.springframework:spring-beans:jar:5.0.5.RELEASE:compile

[INFO] |  \- org.springframework:spring-webmvc:jar:5.0.5.RELEASE:compile

[INFO] |     +- org.springframework:spring-aop:jar:5.0.5.RELEASE:compile

[INFO] |     +- org.springframework:spring-context:jar:5.0.5.RELEASE:compile

[INFO] |     \- org.springframework:spring-expression:jar:5.0.5.RELEASE:compile

3、自动配置

Spring Boot能根据当前类路径下的类或者 jar 包里面来的类来自动配置 Spring Bean,如添加一个 spring-boot-starter-web 启动器就能拥有 web 的功能,无需其他配置。也可以在配置文件中添加相关配置来自定义装配,这个后面的课程会讲到,请关注后续内容。

4、无代码生成和XML配置

Spring Boot配置过程中无代码生成,也无需XML配置文件就能完成所有配置工作,这一切都是借助于条件注解完成的,这也是 Spring 4+ 的核心功能之一。

5、应用监控

Spring Boot提供一系列端点可以监控服务及应用,能对Spring 应用做健康检测。

Spring Boot 的缺点

说了这么多 Spring Boot 的优点和特色,虽然上手很容易,但也不是没有缺点。任何框架都有其优缺点,Spring Boot 也不例外,我大概可以总结有以下几个缺点。

1、需要非常了解 Spring Boot 的核心技术原理,不然一旦遇到问题就很棘手。因为什么东西都集成了,自动配置化。这样,需要对配置信息非常熟悉,要找起问题来不是很容易。

2、从原始 Spring 项目很难平滑迁移至 Spring Boot 框架上来,因为有些历史老旧的 XML 配置无法通过 Java 来配置,还需要额外的 XML 文件就不是很完美。再比如,之前是独立的 Tomcat,什么参数都在线上配置好了,你改为内置的 Tomcat 就会遇到很多问题。

相对于优点来说,这些缺点也都不算什么。总之,Spring Boot 是值得我们任何一个 Java 开发者尝试摸索的。

springBoot 这货特别火的更多相关文章

  1. SpringBoot系列一:SpringBoot的产生

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 长期以来 Java 的开发一直让人所诟病: ·Java 项目开发复杂度极其高: · Java 项目的维护非常困难: · 在云时代 ...

  2. Rust这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,而且生态不行、所以恶性循环

    这种新型的语言注定火不起来,功能太强大(特性太多),还不如用成熟稳定强大的C/C++,,而Golang足够简单,入门快,编译快,性能也强悍,解决了服务端开发人员的痛点,,注定被大多数人接受... go ...

  3. SpringBoot+Minio搭建不再爆肝秃头的分布式文件服务器

    前言 1).有人一定会问,为什么不用FastDFS?众所周知,FastDFS的原生安装非常复杂,有过安装经验的人大体都明白,虽然可以利用别人做好的docker直接安装,但真正使用过程中也可能出现许多莫 ...

  4. Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

    一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...

  5. 一键上手时下最火AI作画工具

    摘要:在华为云ModelArts上, 无需考虑计算资源.环境的搭建,就算不懂代码,也能按照教程案例,通过Stable Diffusion成为艺术大师. 本文分享自华为云社区<跟着华为云Model ...

  6. 走进AngularJs(七) 过滤器(filter)

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...

  7. 走进AngularJs(七) 过滤器(filter) - 吕大豹

    时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...

  8. AngularJs--过滤器(filter)

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...

  9. Angular之filter学习

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...

  10. SpringMvc+JavaConfig+Idea 搭建项目

    1.介绍 之前搭建SpringMvc项目要配置一系列的配置文件,比如web.xml,applicationContext.xml,dispatcher.xml.Spring 3.X之后推出了基于Jav ...

随机推荐

  1. QT如何安装?

    Qt安装教程 OLD HELPS <oldhelps@126.com > 目录 Qt安装教程 下载 注册.登录 接受验证邮件 安装 下载 从https://download.qt.io/n ...

  2. vue高级进阶( 二 ) 8种组件通信详解

      vue高级进阶( 二 ) 8种组件通信详解 猛兽总是独行,牛羊才成群结队. -------鲁迅 vue组件通信的重要性无需多言...但是你肯定没有全部掌握,所以这第二篇文章应运而生 props和$ ...

  3. MXPlayer使用第三方解码器

    MXPlayer内置解码没法播放EAC3音频,可以添加第三方解码器解决 https://github.com/USBhost/MX_FFmpeg 不清楚自己什么平台选择mx_aio.zip,在MXPl ...

  4. @Service注解

    @Service注解的作用之一就是添加在Service层做Bean实例化, 在遇到service层方法有多个实现时也可指定@Service(name=""),并在controlle ...

  5. EF Core如何到回滚上一次迁移

    update-database 上上次迁移记录 让数据库回滚 remove-migration 删除本次有误的迁移文件 修改完毕后 add-migration updata-database 完成

  6. git添加github和gitee多个git地址管理

    1.git init //初始化当前的git地址 2.git remote add github github.com //git remote add git标识 git地址 3.git pull ...

  7. 【ZYNQ学习】各个主题的值得看的博客

    在学习ZYNQ时会遇到不少问题,这时我们一方面要在DocNav找Xilinx的官方文档,另一方面要参考别人的一些记录的解决好的办法,我在学习的时候看到了不少大佬的博客,给我带来了很大帮助.在这篇博客, ...

  8. linux 中sed命令如何删除第一列和最后一列

    删除第一列 (base) root@PC1:/home/test# cat test.txt1 MIR1302-10 12 FAM138A 23 OR4F5 34 RP11-34P13.7 45 RP ...

  9. 封装ajax、获取上一页面传参的方法

    1.封装ajax var defaultUrl = 'http://192.168.1.1:3000/' function post_data(url,data,successfn,errorfn){ ...

  10. curl 与 header 及 file_get_countents 访问内容时的区别

    在开发中 想用curl 或者是file_get_contents 模拟请求或者是获取数据时 ,经常会发现获取到的内容与想象中的不一样,主要原因在与这两个走得host要走外网,在内网及测试环境下host ...