Spring Boot是什么?

背景

最近因公司需要,开始研究java相关的开发,之前一直从事.net相关开发,所以写的或者理解的不对的地方呢,希望大家批评指正。

首先开发框架吧,就像.net很早之前有asp.net webForm,asp.net MVC,.net core等,Java也有这样的框架,比如Spring Framework、Spring Data、Spring Batch、Spring Security、Spring MVC等等。记得好多年前吧,也接触过java spring开发,当时的感觉就是配置文档太多了,经常因为配置文件错了导致程序起不来,而.net程序就封装得很好,很多东西微软都帮我们做好了,比如asp.net MVC,当我在建立这个项目的时候,IDE已经根据向导帮我们把结构都搭好了,不需要更多的配置,程序员只需要关注业务代码,所以当时也是放弃了JAVA的深入学习。

那么几年后的今天,重新来学java也是感触良多,Java的社区生态活跃度确实比.net好太多,开源项目都是java过来的居多,很多.net的框架也是从java演变和借鉴过来的,好的,废话不说了,我的入门第一课呢,就从Spring Boot开始,有点人觉得Spring都不会,一上来就学Spring Boot是不是不太好。我觉得没啥关系哈,毕竟Spring Boot是个引导,让开发Spring程序更简单化了,接下来我们就探讨下Spring Boot到底是个什么东西?

Spring

为了更好的理解Spring Boot,首先大致了解下Spring哈,如果要用Spring来开发一个Hello World Web应用程序,该做些什么?

  • 一个项目结构,包含必要的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
  • 一个web.xml文件。
  • 一个启用了Spring MVC的Spring配置。
  • 一个控制器类,以“Hello World”响应http请求。
  • 一个用于部署应用程序的Web应用服务器,比如:tomcat

而这些繁琐的工作为什么要开发者自己来提供呢,如果我在创建这个项目的时候就自动生成那该多好啊!那这时候Spring Boot就出现了。

Spring Boot

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

  • 自动配置
  • 起步依赖
  • 命令行界面
  • Actuator
  1. 自动配置
    Spring Boot会为常见的配置场景进行自动配置。比如Thymeleaf模板、安全和Spring MVC。
  2. 起步依赖
    我们在项目中会应用到各种各样的库,如何来管理这些依赖项呢?Group和Artifact是什么?你需要哪个版本?会不会有冲突?这些都是要考虑的。
    Spring Boot起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用的库聚合在一起,组成了几个为特定功能而定制的依赖。
  3. 命令行界面
    快速开发Spring应用程序的方法,Spring Boot CLI,不是非必要组成部分。
  4. Actuator
    其他几个都是简化Spring开发,而Actuatro则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就可以窥探应用程序的内部情况了。

项目结构解析

新建项目

我用IntelliJ idea社区版做了一个Demo,通过这个Demo来解析。
首先新建一个项目,选择Spring Assistant,如下图所示,因社区版默认是没有Spring Assistant,也没有Spring initializr,所以必须先安装一个插件。


31.png

填些一些基本信息,比如项目名称、Manven Grouphe Artifact Id、JAVA版本等,以及你想用Maven还是Gradle来构建项目。我这里是用Maven来构建项目。


32.png

接下来是问你要往项目里添加什么依赖?比如我选择了Spring Web,还有Thymeleaf模板引擎,只要勾上就好。
33.png

下一步,最后点击Finish项目就创建好了,我们可以看一下建好的项目结构。


34.png

自动配置

DemoApplication.java不仅是启动引导类,还是配置类。

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@SpringBootApplication开启组件扫描和自动配置功能。实际上,@SpringBootApplication将三个有用的注解组合在了一起。

  • Spring的@Configuration:标明该类使用Spring基于java的配置。
  • Spring的@ComponentScan:启用组件扫描,这样你写的Web控制类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
  • Spring Boot的@EnabeAutoConfiguration:这个不起眼的小注解也可以称为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力。

mani()方法让你可以在命令行里把该应用程序当作一个可执行的JAR文件来运行。这里SpringApplication.run()传递了一个DemoApplication类的引用,还有命令行参数,通过这些启动应用程序。

起步依赖

因为我们选的Maven构建的项目,所以会生成一个pop.xml文件。
pop.xml及起步依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--从spring-boot-starter-parent继承版本号-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
      <!--指定JDK版本-->
    <properties>
        <java.version>1.8</java.version>
    </properties>
      <!--起步依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
<!--运用Spring Boot插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

说起依赖,都只有五个依赖,除了手工添加的,其他的Artifact ID都有spring-boot-starter-前缀。这些都是Spring Boot起步依赖,它们都有助于Spring Boot应用程序的构建。
请注意pop.xml里的依赖都没有指定版本,那是因为spring-boot-starter-parent作为上一级,这样一来就能利用Maven的依赖管理功能,继承很多常用库的依赖版本,在你声明的时候就不需要指定版本了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容