之前學習過一遍Springboot,感覺知識有一些淩亂。是以打算從到尾整理一遍知識架構,今天是第一章SpringBoot入門,後面會繼續更新下面的知識,主要是總結尚矽谷視訊中的知識點。
一、簡介
Springboot來簡化Spring應用開發,約定大于配置,去繁從簡,just run就能建立一個獨立的、産品級應用。
背景:J2EE笨重的開發、繁多的配置、低下的開發效率、複雜的部署流程、第三方技術內建難度大。
解決:
- “Spring全家桶”時代
- SpringBoot -》J2EE一站式解決方案
- Spring Cloud -》分布式整體解決方案 優點:
- 快速建立獨立運作的Spring項目以及與主流架構內建
- 使用嵌入式的Servlet容器,應用無需打成war包
- starters自動依賴與版本控制
- 大量的自動配置,簡化開發,也可以使用預設值
- 無需配置XML,無代碼生成,開箱即用
- 準生産環境的運作時應用監控
- 與雲計算的天然內建
二、環境準備
- jdk1.8
- maven3.x
- IntellijlDEA2018
- SpringBoot 2.1.5 RELEASE
三、Spring Boot HelloWorld
測試功能:浏覽器發送hello請求,伺服器接受請求并處理,響應Hello World字元串。
1. 建立一個maven工程;(jar)
2. 導入SpringBoot相關的依賴
3.編寫一個主程式;啟動Spring Boot應用
4.編寫相關的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.啟動測試
6.簡化部署
- 在pom.xml中添加一個插件依賴 2.選擇pakage方法進行打包 3.将打包好的jar,用cmd指令行運作部署
四、HelloWorld探究
1.POM檔案
- 父項目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
</parent>
他的父項目
<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應用裡面的所有依賴版本;
舉例如下:
<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的版本仲裁中心;
以後我們導入依賴預設是不需要寫版本;(沒有在dependencies裡面管理的依賴自然需要寫版本)
2.導入的依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- spring-boot-starter:spring-boot場景啟動器;幫我們導入了web子產品正常運作所依賴的元件
- SpringBoot将所有的功能場景都抽取出來,做成一個個starters(啟動器),隻需要在項目裡面引用這些starter相關場景的所有依賴就會導入進來。要用什麼功能,就導入什麼starter。
2.主程式類
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//啟動spring應用
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
- @SpringBootApplication:Spring Boot應用标注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應該運作這個類的main方法來啟動SpringBoot應用
@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的配置類;
@Configuration:配置類上來标注這個注解;
配置類 ----- 配置檔案;配置類也是容器中的一個元件;@Component
-
@EnableAutoConfiguration:開啟自動配置功能;
以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自 動配置功能;這樣自動配置才能生效;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
-
@AutoConfigurationPackage:自動配置包
@Import(AutoConfigurationPackages.Registrar.class):
Spring的底層注解@Import,給容器中導入一個元件;導入的元件由 AutoConfigurationPackages.Registrar.class;
将主配置類(@SpringBootApplication标注的類)的所在包及下面所有子包裡面的所有元件掃描到Spring容器
-
給容器中導入元件?
EnableAutoConfigurationImportSelector:導入哪些元件的選擇器;
将所有需要導入的元件以全類名的方式傳回;這些元件就會被添加到容器中;
會給容器中導入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導入這個場景需要的所有元件, 并配置好這些元件;
-
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中擷取EnableAutoConfiguration指定的值,将 這些值作為自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東 西,自動配置類都幫我們;
J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar
五、使用Spring Initializer快速建立SpringBoot
- 主程式已經生成好了,我們隻需要我們自己的邏輯
- resources檔案夾中目錄結構 static:儲存所有的靜态資源; js css images; templates:儲存所有的模闆頁面;(Spring Boot預設jar包使用嵌入式的Tomcat,預設不支援JSP頁 面);可以使用模闆引擎(freemarker、thymeleaf); application.properties:Spring Boot應用的配置檔案;可以修改一些預設設定;