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
- 自动配置
Spring Boot会为常见的配置场景进行自动配置。比如Thymeleaf模板、安全和Spring MVC。 - 起步依赖
我们在项目中会应用到各种各样的库,如何来管理这些依赖项呢?Group和Artifact是什么?你需要哪个版本?会不会有冲突?这些都是要考虑的。
Spring Boot起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用的库聚合在一起,组成了几个为特定功能而定制的依赖。 - 命令行界面
快速开发Spring应用程序的方法,Spring Boot CLI,不是非必要组成部分。 - Actuator
其他几个都是简化Spring开发,而Actuatro则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就可以窥探应用程序的内部情况了。
项目结构解析
新建项目
我用IntelliJ idea社区版做了一个Demo,通过这个Demo来解析。
首先新建一个项目,选择Spring Assistant,如下图所示,因社区版默认是没有Spring Assistant,也没有Spring initializr,所以必须先安装一个插件。

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

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

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

自动配置
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的依赖管理功能,继承很多常用库的依赖版本,在你声明的时候就不需要指定版本了。

Spring Boot是什么?的更多相关文章
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- 【微框架】之一:从零开始,轻松搞定SpringCloud微框架系列--开山篇(spring boot 小demo)
Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...
- 玩转spring boot——开篇
很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- 玩转spring boot——AOP与表单验证
AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- 玩转spring boot——结合jQuery和AngularJs
在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——MVC应用
如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...
随机推荐
- 初步理解 MySQL数据库
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MYSQL必须从第1条记录 ...
- SpringBoot 之 拦截配置 与SpringCloud
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.SpringBoot 与 SpringMVC 的区别? SpringMVC是基于Spring的MV ...
- Java实现 LeetCode 823 带因子的二叉树(DP)
823. 带因子的二叉树 给出一个含有不重复整数元素的数组,每个整数均大于 1. 我们用这些整数来构建二叉树,每个整数可以使用任意次数. 其中:每个非叶结点的值应等于它的两个子结点的值的乘积. 满足条 ...
- Java实现UVA10131越大越聪明(蓝桥杯每周一题)
10131越大越聪明(蓝桥杯每周一题) [问题描述] 一些人认为,大象的体型越大,脑子越聪明.为了反驳这一错误观点,你想要分析一组大象的数据,找出尽量 多的大象组成一个体重严格递增但 IQ 严格递减的 ...
- Java中抽象类与接口的详细说明
首先简单的介绍一下抽象类: 定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没问题,那么类里面一般都是有方法的,方法包括方法名和方法体,这是常识对不对,那 ...
- Java实现蓝桥杯G将军
G将军有一支训练有素的军队,这个军队除开G将军外,每名士兵都有一个直接上级(可能是其他士兵,也可能是G将军).现在G将军将接受一个特别的任务,需要派遣一部分士兵(至少一个)组成一个敢死队,为了增加队员 ...
- Jmeter连接数据库进行参数化
实际使用Jmeter进行性能测试或接口测试自动化过程中,很多场景需要从数据库中获取一些关键性参数,或进行一些断言,比较,那么如何进行数据库连接以及怎么获取参数就变得尤为重要 一.下载mysql驱动 1 ...
- CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?
在全站上云的背景下,云计算已经不仅仅是大型互联网公司的独享概念,正在被更多的传统企业.中小企业甚至个人站长所采用.在众多云计算服务中,最常见两个产品就是云服务器和CDN,今天的CDN百科第三讲,就给大 ...
- ubuntu下创建流媒体服务器的步骤
注意,我用的是ubuntu16.04.10,用ubuntu18安装会报错 通过crtmpserver搭建的步骤: 服务器端前置操作: 安装openssh-server,这样可以在windows中通过s ...
- MacOS配置.bash_profile,重启终端后配置失效和MacOS .zshrc does not exist问题
MacOS配置.bash_profile,重启终端后配置失效和MacOS .zshrc does not exist问题 场景 在Mac中配置golang环境变量更改GOPATH路径,在~/.ba ...