Spring Boot介绍
如果您编写过基于 Spring 的应用程序,就会知道Spring只是完成 “Hello, World” 就需要大量配置工作。Spring目前最大的问题就是:
1. 依赖太多了,而且要注意版本兼容
2. 配置复杂、繁琐
3. 部署和运行麻烦。
SpringBoot作为Spring家族的新成员,其设计⽬目的是⽤用来简化新 Spring 应⽤的初始搭建以及开发过程。SringBoot近乎是整个Spring技术栈的一个大整合,所以Spring所具有的的功能它基本都具备。SpringBoot的官网对它的介绍是:
“Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.
We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration”
大致意思是:“Spring Boot 使您能轻松地创建独立的、生产级的、基于 Spring 且能直接运行的应用程序。Spring Boot 对Spring 平台和第三方库拥有合理的默认值,大多数Spring Boot应用程序只需要很少的Spring配置。”
同时,SpringBoot作为SpringCloud的基础,也是学习微服务(微服务:一种架构风格,每一个功能元素最终都是一个可独立替换和独立升级的软件单元,2014,martin fowler)的一个前提和基础。
Spring Boot具有以下的优点:
- 创建独立的Spring应用程序
- 方便对外输出各种形式的服务,如 REST API、WebSocket、Web等
- 方便直接嵌入Tomcat,Jetty或Undertow(无需部署WAR文件)
- 尽最大努力自动配置Spring和第三方库
…
前期准备:
为了方便大家的学习,这里介绍一下我的一些环境的约束,方便大家参考,避免不必要的错误:
- jdk1.8:Spring Boot 推荐jdk1.7及以上;java version “”1.8.0_172-ea”“
- IntelliJIDEA2017:IntelliJ IDEA 2017.2 x64
快速创建第一个SpringBoot应用
如果您使⽤的也是 Idea 工具,可以按照如下操作进行:
(1)单击 File | New | Project… 命令,弹出新建项⽬目框。
(2)选择 Spring Initializr 选项,单击 Next 按钮。
(3)然后出现了需要配置内容的界面,填写相关内容后(Type为默认的Maven Project ,Language 为 JAVA,Packaging为JAR,java version 根据你的实际java版本选择即可,其他均为默认),单击 Next 按钮
这里需要说明的是:
- Group:⼀般填写公司域名,⽐比如百度公司填 com.baidu,演⽰示使⽤用 com.example。
- Artifact:可以理解为项⽬目的名称,可以根据实际情况来填,本次演⽰示填写 springboot-demo。
(4)Dependencies:用来添加我们项⽬目所依赖的Spring Boot组件,可以多选,本次选择Web
即可。
(5)我们创建成果的项目目录如下图所示,其中.mvn、mvnw、mvnw.cmd是暂时的用不到文件,我们可以暂时先删除
可以看出Spring Boot的项目结构为:
- src/main/java:程序开发以及主程序⼊入⼝口
- src/main/resources:配置⽂文件
- static:保存所有的静态资源; js css images;
- templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
- application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;
- src/test/java:测试程序
(6)创建com.example包下创建controller目录,并编写HelloWorldController方
package com.example.springbootdemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: REN
* @Description:
* @Date: Created in 21:28 2018/8/18
*/
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
(7)直接运行主函数,并在浏览器中输入:http://localhost:8080/hello
Idea运行成功如图:
浏览器如图:
这样,我们就成功创建了我们的第一个Spring Boot应用。
HelloWorld解析
pom.xml文件
父级依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
这块配置就是Spring Boot父级依赖,有了这个,当前的项目就是Spring Boot项目了同时也是Spring Boot的版本仲裁中心;以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)
启动依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。例如我们创建的是web应用,那么我们的依赖模块就是:spring-boot-starter-web。
Spring Boot Maven插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
把项目打包成一个可执行的超级JAR包(uber-JAR),可以绕过java -jar来运行应用程序。
测试依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
测试模块,包括 JUnit、Hamcrest、Mockito。
应用程序入口类
Main函数
package com.example.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
*/
@SpringBootApplication
public class SpringbootDemoApplication {
public static void main(String[] args) {
//让Spring Boot运行起来
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就运行这个类的main方法来启动SpringBoot应用;
简析@SpringBootApplication
我们点进去查看源码可看到 @SpringBootApplication又依赖于下面的依赖:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
- @SpringBootConfiguration:Spring Boot的配置类;标注在某个类上,表示这是一个Spring Boot的配置类
- @EnableAutoConfiguration:开启自动配置功能;以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
- @ComponentScan:指明对象扫描范围,默认指扫描当前启动类所在的包里的对象,如果当前启动类没有包,则在启动时会报错:
Controller类
package com.example.springbootdemo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: REN
* @Description:
* @Date: Created in 21:28 2018/8/18
*/
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
@RestController:controller⾥面的方法都以json格式输出,如果是@Controller就代表着输出为页面内容。@RestController注解等价于@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出。
Spring Boot应用启动的三种方式
一、直接运行Main函数
这种方式就是我们在上面构建第一个Spring Boot应用时使用的方式:
二、使用命令 mvn spring-boot:run
在Idea执行该命令的方法:
双击即可执行该命令。
三、使用命令 java -jar xxxx.jar
首先,我们使用 mvn package将程序打包成JAR包
然后我们进入到我们项目的target文件夹下找到我们刚打好的Jar包,进入cmd
最后在命令行中执行命令,即可成功运行
错误解决方案:
1.如果启动时提示包冲突,请检查你的JDK中是否有以下tomcat包的出现:
如果有,建议先移出再尝试启动。
2.如果提示缺少包,则将Tomcat下的servlet-api.jar复制到JDK下即可
以上错误的包括但不限于以上的解决方案,还是以实际运行过程中的问题为准。
总结
使用Spring Boot很容易创建一个独立运行、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。作为今天的初识,我们只需要了解以下两点即可:
- 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置
- 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
- 掌握三种Spring Boot应用的启动方式
源码下载
特别说明:
参考文献:
尚硅谷,SpringBoot核心技术篇
纯洁的微笑,快速学习 Spring Boot 技术栈
转载说明: 支持转载,但请保留原作者,原文链接,微信公众号二维码

扫码关注作者个人技术公众号,不定期将有学习资源分享