之前學(xué)習(xí)過一遍Springboot,感覺知識(shí)有一些凌亂。所以打算從到尾整理一遍知識(shí)架構(gòu),今天是第一章SpringBoot入門,后面會(huì)繼續(xù)更新下面的知識(shí),主要是總結(jié)尚硅谷視頻中的知識(shí)點(diǎn)。
一、簡(jiǎn)介
Springboot來簡(jiǎn)化Spring應(yīng)用開發(fā),約定大于配置,去繁從簡(jiǎn),just run就能創(chuàng)建一個(gè)獨(dú)立的、產(chǎn)品級(jí)應(yīng)用。
<font color="blue" size="4.5px">背景</font>:J2EE笨重的開發(fā)、繁多的配置、低下的開發(fā)效率、復(fù)雜的部署流程、第三方技術(shù)集成難度大。
<font color="blue" size="4.5px">解決</font>:
- “Spring全家桶”時(shí)代
- SpringBoot -》J2EE一站式解決方案
- Spring Cloud -》分布式整體解決方案
在這里插入圖片描述
<font color="blue" size="4.5px">優(yōu)點(diǎn)</font>: - 快速創(chuàng)建獨(dú)立運(yùn)行的Spring項(xiàng)目以及與主流框架集成
- 使用嵌入式的Servlet容器,應(yīng)用無需打成war包
- starters自動(dòng)依賴與版本控制
- 大量的自動(dòng)配置,簡(jiǎn)化開發(fā),也可以使用默認(rèn)值
- 無需配置XML,無代碼生成,開箱即用
- 準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行時(shí)應(yīng)用監(jiān)控
- 與云計(jì)算的天然集成
二、環(huán)境準(zhǔn)備
- jdk1.8
- maven3.x
- IntellijlDEA2018
- SpringBoot 2.1.5 RELEASE
三、Spring Boot HelloWorld
<font color="blue" size="3px">測(cè)試功能</font>:瀏覽器發(fā)送hello請(qǐng)求,服務(wù)器接受請(qǐng)求并處理,響應(yīng)Hello World字符串。
1. 創(chuàng)建一個(gè)maven工程;(jar)



2. 導(dǎo)入SpringBoot相關(guān)的依賴

3.編寫一個(gè)主程序;啟動(dòng)Spring Boot應(yīng)用
4.編寫相關(guān)的Controller、Service
package com.crud.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* HelloController class
*
* @author Flc
* @date 2019/6/1
*/
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
5.啟動(dòng)測(cè)試
6.簡(jiǎn)化部署
-
在pom.xml中添加一個(gè)插件依賴
在這里插入圖片描述
2.選擇pakage方法進(jìn)行打包
在這里插入圖片描述
3.將打包好的jar,用cmd命令行運(yùn)行部署
在這里插入圖片描述
四、HelloWorld探究
1.POM文件
- 父項(xiàng)目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
他的父項(xiàng)目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
他來真正管理Spring Boot應(yīng)用里面的所有依賴版本;
舉例如下:
<properties>
<activemq.version>5.15.9</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.74</appengine-sdk.version>
<artemis.version>2.6.4</artemis.version>
<aspectj.version>1.9.4</aspectj.version>
<assertj.version>3.11.1</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
<build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
<byte-buddy.version>1.9.12</byte-buddy.version>
<caffeine.version>2.6.2</caffeine.version>
<cassandra-driver.version>3.6.0</cassandra-driver.version>
<classmate.version>1.4.0</classmate.version>
<commons-codec.version>1.11</commons-codec.version>
Spring Boot的版本仲裁中心;
以后我們導(dǎo)入依賴默認(rèn)是不需要寫版本;(沒有在dependencies里面管理的依賴自然需要寫版本)
2.導(dǎo)入的依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- spring-boot-starter:spring-boot場(chǎng)景啟動(dòng)器;幫我們導(dǎo)入了web模塊正常運(yùn)行所依賴的組件
- SpringBoot將所有的功能場(chǎng)景都抽取出來,做成一個(gè)個(gè)starters(啟動(dòng)器),只需要在項(xiàng)目里面引用這些starter相關(guān)場(chǎng)景的所有依賴就會(huì)導(dǎo)入進(jìn)來。要用什么功能,就導(dǎo)入什么starter。
2.主程序類
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//啟動(dòng)spring應(yīng)用
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
- @SpringBootApplication:Spring Boot應(yīng)用標(biāo)注在某個(gè)類上說明這個(gè)類是SpringBoot的主配置類,SpringBoot就應(yīng)該運(yùn)行這個(gè)類的main方法來啟動(dòng)SpringBoot應(yīng)用
@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 {
-
@SpringBootCon?guration:Spring Boot的配置類;
標(biāo)注在某個(gè)類上,表示這是一個(gè)Spring Boot的配置類;@Con?guration:配置類上來標(biāo)注這個(gè)注解;
配置類 ----- 配置文件;配置類也是容器中的一個(gè)組件;@Component @EnableAutoCon?guration:開啟自動(dòng)配置功能;
以前我們需要配置的東西,Spring Boot幫我們自動(dòng)配置;@EnableAutoCon?guration告訴SpringBoot開啟自 動(dòng)配置功能;這樣自動(dòng)配置才能生效;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoCon?gurationPackage:自動(dòng)配置包
@Import(AutoCon?gurationPackages.Registrar.class):
Spring的底層注解@Import,給容器中導(dǎo)入一個(gè)組件;導(dǎo)入的組件由 AutoCon?gurationPackages.Registrar.class;
將主配置類(@SpringBootApplication標(biāo)注的類)的所在包及下面所有子包里面的所有組件掃描到Spring容器-
給容器中導(dǎo)入組件?
EnableAutoCon?gurationImportSelector:導(dǎo)入哪些組件的選擇器;
將所有需要導(dǎo)入的組件以全類名的方式返回;這些組件就會(huì)被添加到容器中;會(huì)給容器中導(dǎo)入非常多的自動(dòng)配置類(xxxAutoCon?guration);就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有組件, 并配置好這些組件;
在這里插入圖片描述 Spring Boot在啟動(dòng)的時(shí)候從類路徑下的META-INF/spring.factories中獲取EnableAutoCon?guration指定的值,將 這些值作為自動(dòng)配置類導(dǎo)入到容器中,自動(dòng)配置類就生效,幫我們進(jìn)行自動(dòng)配置工作;以前我們需要自己配置的東 西,自動(dòng)配置類都幫我們;
J2EE的整體整合解決方案和自動(dòng)配置都在spring-boot-autocon?gure-1.5.9.RELEASE.jar
五、使用Spring Initializer快速創(chuàng)建SpringBoot
- 主程序已經(jīng)生成好了,我們只需要我們自己的邏輯
- resources文件夾中目錄結(jié)構(gòu) static:保存所有的靜態(tài)資源; js css images; templates:保存所有的模板頁面;(Spring Boot默認(rèn)jar包使用嵌入式的Tomcat,默認(rèn)不支持JSP頁 面);可以使用模板引擎(freemarker、thymeleaf); application.properties:Spring Boot應(yīng)用的配置文件;可以修改一些默認(rèn)設(shè)置;