Spring Boot入門
1: 介紹
spring boot是基于spring框架搭建起來的服務(wù)器應(yīng)用框架,它嵌入Tomcat, Jetty或者Undertow等服務(wù)器,并且不需要傳統(tǒng)的WAR文件進(jìn)行部署??梢园阉闯煞?wù)器總spring框架的一列整合,省去了我們很多配置等工作??梢詭椭覀兛焖俳⒁粋€產(chǎn)品級別的企業(yè)級應(yīng)用。
1.1:原有的spring開發(fā)
在原有的spring項(xiàng)目開發(fā)中,我們使用spring的組件建立工程后需要進(jìn)行大量的項(xiàng)目配置,結(jié)合maven導(dǎo)入大量的jar包才能讓我們的程序啟動起來,大量的配置使程序員的工作配置大于開發(fā),這給我們造成了很不好的體驗(yàn),想要詳細(xì)了解可以學(xué)習(xí)spring的開發(fā),學(xué)習(xí)spring項(xiàng)目的開發(fā)并不會讓我們重復(fù)造車,spring boot是基于spring的這樣會使我們更好的理解spring boot。
1.2:現(xiàn)有的spring開發(fā)
從spring的全家桶時代,到現(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
- 盡可能的自動給配置spring,簡化開發(fā),也可修改默認(rèn)配置。
- 提供生產(chǎn)就緒型功能,如指標(biāo)、健康檢查和外部部署
- 絕對沒有代碼生成,對xml沒有配置要求。
1.4:缺點(diǎn)
spring boot最大的缺點(diǎn)就是入門容易精通難,在后臺服務(wù)龐大的工程中,雖然spring boot為為我們帶來的便利,但同樣深層次的服務(wù)器問題也難暴露出來給我們處理,這樣就造成了我們需要非常精通spring boot并且了解真?zhèn)€服務(wù)器的框架才能更好的完成我們的工作。
1.5:大時代背景(微服務(wù))
微服務(wù)的概念在2014年被提出,微服務(wù)可以理解為一組小型服務(wù)的集合,每一個小型服務(wù)都運(yùn)行在自己的進(jìn)程內(nèi),服務(wù)與服務(wù)之間通過HTTP進(jìn)行輕量級通信,每個服務(wù)都只專注與自己的設(shè)計目標(biāo),這樣讓開發(fā)更簡介,微服務(wù)整體對外進(jìn)行服務(wù),訪問通過網(wǎng)關(guān)來分析訪問的是那個服務(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是一些模塊的依賴集合,我們不再需要一個一個jar的手動導(dǎo)入,而只需要導(dǎo)入spring提供的starter就可以將整個我們需要的模塊依賴導(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)入這個,它確定了
你引入的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>
<!--我們是一個web工程,導(dǎo)入spring boot的web依賴模塊-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--導(dǎo)入spring boot的單元測試依賴模塊-->
<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文件是這個項(xiàng)目的配置文件,在spring boot中絕大多數(shù)配置是spring為我們自動配置的默認(rèn)配置,但我們也可以在這個文件中對默認(rèn)配置進(jìn)行修改,例如啟動項(xiàng)目的端口號等?,F(xiàn)在這個文件什么內(nèi)容都沒有
程序的入口:
程序的入口就是Java源代碼目錄的 xxxApplication.java文件中,xxx一般為你的項(xiàng)目名,
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
*該注解標(biāo)記了該類為spring boot的程序入口類,
*一個spring boot項(xiàng)目該注解只能存在在一個類里
*/
@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入門簡單就在于它的開發(fā)簡單,學(xué)習(xí)起來特別快,在Java源代碼目錄新建文件HelloWorld.java,創(chuàng)建helloWorld訪問。
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//注解標(biāo)注這個類為RestControl,稍后會詳細(xì)介紹
@RestController
public class HelloWorld {
//注解標(biāo)定訪問的相對路徑。
@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:我們的相對路徑是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)注在某個類上,說明這個類是springboot的主配置類,也是入口類,springboot就可以運(yùn)行該類的main方法啟動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 {
前四個注解都是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將配置文件都替換為配置類。它也是容器中的一個組件。
-
@EnableAutoConfiguration:開啟自動配置功能
以前我們spring開發(fā)配置許多參數(shù),這個注解告訴springboot自動配置默認(rèn)參數(shù),有這個注解才能使自動配置生效。@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {-
@AutoConfigurationPackage:自動配置包:
@Import({AutoConfigurationPackages.Registrar.class}) public @interface AutoConfigurationPackage { }這個import注解是spring的底層注解,給容器導(dǎo)入一個組件Registrar,查看源碼可以看到
這個組件是將我們主配置類(@SpringBootAplication)所在包及所有子包下的所有組件都掃描到spring boot容器中。 -
@import({AutoConfigurationImportSelector.class}):
給容器導(dǎo)入AutoConfigurationImportSelector組件,作用是將所有需要導(dǎo)入的組價以全類名的方式返回,這些組件會被添加到容器中,導(dǎo)入的組件為非常多的自動配置類(xxxAutoConfiguration),總結(jié)就是給容器中導(dǎo)入這個場景需要的組件,并配置好組件。
有了這些自動配置類,免去了我們手動編寫配置注入功能組件等工作
主要函數(shù)為List<String> configurations = SpringFactoriesLoader.loadFactoryNames( getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());這個方法使用getSpringFactoriesLoaderFactoryClass-->EnableAutoConfiguration.class
getBeanClassLoader為一個類加載器,其中從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自動配置配置的默認(rèn)配置,Spring boot讀取文件在底層為我們自動配置好
yml為YAML文件,關(guān)于YAML 文件的語法可以百度搜,很簡單,也可以看我的另一篇文章
#配置啟動的串口號
server.port=8888