Spring Boot入門
1: 介紹
spring boot是基于spring框架搭建起來的服務(wù)器應(yīng)用框架,它嵌入Tomcat, Jetty或者Undertow等服務(wù)器,并且不需要傳統(tǒng)的WAR文件進(jìn)行部署。可以把它看成服務(wù)器總spring框架的一列整合,省去了我們很多配置等工作??梢詭椭覀兛焖俳⒁粋€(gè)產(chǎn)品級(jí)別的企業(yè)級(jí)應(yīng)用。
1.1:原有的spring開發(fā)
在原有的spring項(xiàng)目開發(fā)中,我們使用spring的組件建立工程后需要進(jìn)行大量的項(xiàng)目配置,結(jié)合maven導(dǎo)入大量的jar包才能讓我們的程序啟動(dòng)起來,大量的配置使程序員的工作配置大于開發(fā),這給我們?cè)斐闪撕懿缓玫捏w驗(yàn),想要詳細(xì)了解可以學(xué)習(xí)spring的開發(fā),學(xué)習(xí)spring項(xiàng)目的開發(fā)并不會(huì)讓我們重復(fù)造車,spring boot是基于spring的這樣會(huì)使我們更好的理解spring boot。
1.2:現(xiàn)有的spring開發(fā)
從spring的全家桶時(shí)代,到現(xiàn)在的spring boot(JavaEE一站式解決方案)、spring cloud(分布式整體解決方案),給我們的開發(fā)提供了極大的便利,讓我們精力都集中在開發(fā)上,避免了大量的配置。
1.3:優(yōu)點(diǎn)
- 創(chuàng)建獨(dú)立的spring應(yīng)用程序
- 嵌入Tomcat、Jetty、Undertow,無需部署WAR文件
- 允許通過maven來根據(jù)需要獲取starter
- 盡可能的自動(dòng)給配置spring,簡(jiǎn)化開發(fā),也可修改默認(rèn)配置。
- 提供生產(chǎn)就緒型功能,如指標(biāo)、健康檢查和外部部署
- 絕對(duì)沒有代碼生成,對(duì)xml沒有配置要求。
1.4:缺點(diǎn)
spring boot最大的缺點(diǎn)就是入門容易精通難,在后臺(tái)服務(wù)龐大的工程中,雖然spring boot為為我們帶來的便利,但同樣深層次的服務(wù)器問題也難暴露出來給我們處理,這樣就造成了我們需要非常精通spring boot并且了解真?zhèn)€服務(wù)器的框架才能更好的完成我們的工作。
1.5:大時(shí)代背景(微服務(wù))
微服務(wù)的概念在2014年被提出,微服務(wù)可以理解為一組小型服務(wù)的集合,每一個(gè)小型服務(wù)都運(yùn)行在自己的進(jìn)程內(nèi),服務(wù)與服務(wù)之間通過HTTP進(jìn)行輕量級(jí)通信,每個(gè)服務(wù)都只專注與自己的設(shè)計(jì)目標(biāo),這樣讓開發(fā)更簡(jiǎn)介,微服務(wù)整體對(duì)外進(jìn)行服務(wù),訪問通過網(wǎng)關(guān)來分析訪問的是那個(gè)服務(wù)來進(jìn)行分發(fā)。spring boot就是微服務(wù)的一站式解決方案。
2:Spring Boot HelloWorld
2.1: 創(chuàng)建工程
熟悉maven的和IDE的可以直接在IDE中創(chuàng)建Spring Boot工程,還可以在start.spring.io網(wǎng)站上建立工程后導(dǎo)入IDE。本人用的idea.。
導(dǎo)入后的文件目錄

- resources
- startic:保存所有靜態(tài)資源:js,css,jsp
- templates:用來保存所有的模板頁面,
- application.properties:spring boot項(xiàng)目的配置文件。可以修改項(xiàng)目的默認(rèn)配置。
2.2:項(xiàng)目介紹
spring boot為我們提供了很多starter,這些starter是一些模塊的依賴集合,我們不再需要一個(gè)一個(gè)jar的手動(dòng)導(dǎo)入,而只需要導(dǎo)入spring提供的starter就可以將整個(gè)我們需要的模塊依賴導(dǎo)入進(jìn)來,
pom.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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!--導(dǎo)入spring boot的parent,使用spring boot都需要導(dǎo)入這個(gè),它確定了
你引入的spring boot模塊的版本信息等,它為我們解決了依賴沖突等問題。-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tian.learn</groupId>
<artifactId>SpringBoot-Learn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot-Learn</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<!--我們是一個(gè)web工程,導(dǎo)入spring boot的web依賴模塊-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--導(dǎo)入spring boot的單元測(cè)試依賴模塊-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--引入springboot的maven插件-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
程序的配置文件
在resource目錄下application.properties文件是這個(gè)項(xiàng)目的配置文件,在spring boot中絕大多數(shù)配置是spring為我們自動(dòng)配置的默認(rèn)配置,但我們也可以在這個(gè)文件中對(duì)默認(rèn)配置進(jìn)行修改,例如啟動(dòng)項(xiàng)目的端口號(hào)等?,F(xiàn)在這個(gè)文件什么內(nèi)容都沒有
程序的入口:
程序的入口就是Java源代碼目錄的 xxxApplication.java文件中,xxx一般為你的項(xiàng)目名,
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*該注解標(biāo)記了該類為spring boot的程序入口類,
*一個(gè)spring boot項(xiàng)目該注解只能存在在一個(gè)類里
*/
@SpringBootApplication
public class SpringBootLearnApplication {
/**
* main函數(shù)入口,這里將拉起我們的spring boot項(xiàng)目,里面只有一套語句。
*/
public static void main(String[] args) {
SpringApplication.run(SpringBootLearnApplication.class, args);
}
}
2.3:開發(fā)第一HelloWorld
spring boot入門簡(jiǎn)單就在于它的開發(fā)簡(jiǎn)單,學(xué)習(xí)起來特別快,在Java源代碼目錄新建文件HelloWorld.java,創(chuàng)建helloWorld訪問。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//注解標(biāo)注這個(gè)類為RestControl,稍后會(huì)詳細(xì)介紹
@RestController
public class HelloWorld {
//注解標(biāo)定訪問的相對(duì)路徑。
@RequestMapping("/helloworld")
public String hello(){
return "hello world";
}
}
2.4:運(yùn)行
spring boot中默認(rèn)集成了Tomcat的內(nèi)容,所以這里我們不再需要發(fā)布我們的項(xiàng)目到Tomcat,直接運(yùn)行即可,也可以將它打包成jar包,使用Java命令執(zhí)行。
直接運(yùn)行我們的程序入口main函數(shù)
如果沒有配置項(xiàng)目就是localhost:8080:我們的相對(duì)路徑是helloworld,所以瀏覽器的全路徑就是
localhost:8080/helloworld, 查看結(jié)果。
使用maven的package命令打包jar
將項(xiàng)目打包成jar后,我們可以直接運(yùn)行jar,命令:Java -jar 生成的包名
3:項(xiàng)目詳解
@SpringBootApplication
spring boot應(yīng)用標(biāo)注在某個(gè)類上,說明這個(gè)類是springboot的主配置類,也是入口類,springboot就可以運(yùn)行該類的main方法啟動(dòng)SpringBoot應(yīng)用
//@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 {
前四個(gè)注解都是Java的類注解,不了解的可以重新學(xué)習(xí)一下Java注解
-
SpringBootConfiguration : SpringBoot的配置類
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }@configuration:原Spring注解,標(biāo)記配置類,原spring開發(fā)有很多配置文件,現(xiàn)在springboot將配置文件都替換為配置類。它也是容器中的一個(gè)組件。
-
@EnableAutoConfiguration:開啟自動(dòng)配置功能
以前我們spring開發(fā)配置許多參數(shù),這個(gè)注解告訴springboot自動(dòng)配置默認(rèn)參數(shù),有這個(gè)注解才能使自動(dòng)配置生效。@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {-
@AutoConfigurationPackage:自動(dòng)配置包:
@Import({AutoConfigurationPackages.Registrar.class}) public @interface AutoConfigurationPackage { }這個(gè)import注解是spring的底層注解,給容器導(dǎo)入一個(gè)組件Registrar,查看源碼可以看到
這個(gè)組件是將我們主配置類(@SpringBootAplication)所在包及所有子包下的所有組件都掃描到spring boot容器中。 -
@import({AutoConfigurationImportSelector.class}):
給容器導(dǎo)入AutoConfigurationImportSelector組件,作用是將所有需要導(dǎo)入的組價(jià)以全類名的方式返回,這些組件會(huì)被添加到容器中,導(dǎo)入的組件為非常多的自動(dòng)配置類(xxxAutoConfiguration),總結(jié)就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的組件,并配置好組件。
有了這些自動(dòng)配置類,免去了我們手動(dòng)編寫配置注入功能組件等工作
主要函數(shù)為List<String> configurations = SpringFactoriesLoader.loadFactoryNames( getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());這個(gè)方法使用getSpringFactoriesLoaderFactoryClass-->EnableAutoConfiguration.class
getBeanClassLoader為一個(gè)類加載器,其中從loadFacortyNames函數(shù)中可以看到加載器是從META-INF/spring.facroties(spring-boot-autoconfigure包下)文件中讀取配置類的全類名,再通過類加載器來加載的。
-
4:Spring Boot配置
4.1 配置文件
spring boot默認(rèn)全局配置文件有兩種。配置文件放在src/main/resources或 類路徑/config下
- application.properties
- application.yml
作用是修改spring boot自動(dòng)配置配置的默認(rèn)配置,Spring boot讀取文件在底層為我們自動(dòng)配置好
yml為YAML文件,關(guān)于YAML 文件的語法可以百度搜,很簡(jiǎn)單,也可以看我的另一篇文章
#配置啟動(dòng)的串口號(hào)
server.port=8888