SpringBoot(一)入門

SpringBoot是學習尚硅谷的視頻,我只是照寫,記錄筆記,作爲自己的複習資料,整個SpringBoot的學習筆記包括:

一、Spring Boot入門
二、Spring Boot配置
三、Spring Boot與日誌
四、Spring Boot與Web開發
五、Spring Boot與Docker
六、Spring Boot與數據訪問
七、Spring Boot啓動配置原理
八、Spring Boot自定義starters
九、Spring Boot與緩存
十、Spring Boot與消息
十一、Spring Boot與檢索
十二、Spring Boot與任務
十三、Spring Boot與安全
十四、Spring Boot與分佈式
十五、Spring Boot與開發熱部署
十六、Spring Boot與監控管理

1、SpringBoot簡介

       Spring Boot是用來簡化Spring應用開發,約定大於配置(SpringBoot中進行了大量的自動配置),我們可以零配置,很簡單的就創建一個企業級的應用。需要明白的是,SpringBoot不是一個新的框架,而是對Spring進行了再次封裝,讓我們開發更加簡單。

       SpringBoot是簡化Spring應用開發的一個框架;整個Spring技術棧的一個大整合;J2EE開發的一站式解決方案;

       Spring Boot J2EE一站式解決方案,Spring Cloud 分佈式整體解決方案。

優點:
       –快速創建獨立運行的Spring項目以及與主流框架集成;
       –使用嵌入式的Servlet容器,應用無需打成WAR包;
       –starters自動依賴與版本控制;
       –大量的自動配置,簡化開發,也可修改默認值;
       –無需配置XML,無代碼生成,開箱即用;
       –準生產環境的運行時應用監控;
       –與雲計算的天然集成;

本次學習,環境約束:
       –jdk1.8
       –maven3.x
       –IntelliJ IDEA 2019
       –Spring Boot 1.5.9.RELEASE

2、微服務

微服務:是一種架構風格(服務微化),一個應用應該是一組小型服務;可以通過HTTP的方式進行互通;
單體應用:ALL IN ONE
微服務:每一個功能元素最終都是一個可獨立替換和獨立升級的軟件單元;

SpringBoot就是在這樣的時代背景下誕生了。

2、SpringBoot的HelloWorld程序

進入IDEA創建項目之前,先要設置好maven,就是指定本地maven,settings文件以及本地maven倉庫,具體可以百度;

2.1 maven配置

給maven 的settings.xml配置文件的profiles標籤添加:

<profile>
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

同時,爲了避免jar包拉不下來,建議在settings.xml中配置下面的華爲的鏡像倉庫:

<mirror>
	   <id>huaweicloud</id>
	   <mirrorOf>*</mirrorOf>
	   <url>https://mirrors.huaweicloud.com/repository/maven/</url>
	</mirror>

2.2 創建工程

2.2.1 新建一個maven工程

File——》New——》Project——》Maven——》選擇JDK(同時不要勾選Create from archetype)——》next,

填寫完成點擊finish即可。

2.2.2 pom.xml文件

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

2.2.3 創建啓動類

啓動類上要加上 @SpringBootApplication 註解 ,來標註一個主程序類,說明這是一個Spring Boot應用

package com.springboot.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class,args);
    }
}

2.2.4 創建控制器類

       控制器類要放置在啓動類的同包或子包下面,這樣才能被Spring自動掃描到,同時要加上@Controller註解,註冊到Spring的IOC容器:

      處理器方法上,要添加@RequestMapping註解,用來指定映射路徑;添加@ResponseBody註解,用來把返回值轉成Json返回給瀏覽器。

package com.springboot.helloworld.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String hello(){
        return "Hello 不容易啊";
    }
}

2.3 測試

運行啓動類,啓動完成,訪問:http://localhost:8080/hello,就能看到瀏覽器上返回了:Hello 不容易啊

2.4 總結

       通過上面簡單的幾步,我們就創建了一個完整的SpringBoot工程,沒有以前那些繁雜的jar包或依賴需要導入,也不用編寫任何的配置文件(比如以前需要的web.xml、applicationContext.xml等)。如果要添加其他的功能,只需要在pomx.xml中導入相關模塊的starter即可。

2.5 簡化部署

在pom.xml中添加下面的座標:

spring-boot-maven-plugin:這個插件可以將這個應用打成jar包,直接使用java -jar的命令進行執行;

<!-- 這個插件,可以將應用打包成一個可執行的jar包;-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

加入這個插件之後,reimport後,在右側,可以執行package,進行打包,把項目打成一個jar包:

然後在屏幕下面點擊Terminal,進入命令行終端,相當於就是進入cmd窗口,執行java -jar xxxx.jar命令,也可以運行起來:

      這就是可執行的jar包的意思,那麼爲什麼可以達到這個效果呢?因爲SpringBoot內置了tomcat插件,就算沒用tomcat服務器,也可以運行起來,這個tomcat可以從導入的jar包中可以看出:

3、SpringBoot的starter和自動配置的簡單分析

3.1 starter 場景啓動器

在HelloWorld的pom.xml中,首先導入的是一個:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>

而他的父項目是
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐dependencies</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath>../../spring‐boot‐dependencies</relativePath>
</parent>
他來真正管理Spring Boot應用裏面的所有依賴版本;

       spring-boot-dependencies裏面定義了jar包的版本,Spring Boot的版本仲裁中心;以後我們導入依賴默認是不需要寫版本;(沒有在dependencies裏面管理的依賴自然需要聲明版本號)

然後就是導入了web模塊的starter:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

spring-boot-starter:spring-boot場景啓動器;spring-boot-starter-web:幫我們導入了web模塊正常運行所依賴的組件; 

       Spring Boot爲我們提供了簡化企業級開發絕大多數場景的starter pom(啓動器),只要引入了相應場景的starter pom,相關技術的絕大部分配置將會消除(自動配置),從而簡化我們開發。業務中我們就會使用到Spring Boot爲我們自動配置的bean;

       Spring Boot將所有的功能場景都抽取出來,做成一個個的starters(啓動器),只需要在項目裏面引入這些starter相關場景的所有依賴都會導入進來。要用什麼功能就導入什麼場景的啓動器;

       starter類型可以參考:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#using-boot-starter
這些starters幾乎涵蓋了javaee所有常用場景,Spring Boot對這些場景依賴的jar也做了嚴格的測試與版本控制。我們不必擔心jar版本合適度問題。
 

3.2 主程序(入口類)

       最重要的是主程序上的註解:@SpringBootApplication:該註解標註在某個類上說明這個類是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 {

它上面有三個很重要的註解:

1、@SpringBootConfiguration:Spring Boot的配置類;標註在某個類上,表示這是一個Spring Boot的配置類,該註解上標註了註解:@Configuration:配置類上來標註這個註解;配置類等同於配置文件;配置類也是容器中的一個組件;@Component

2、@EnableAutoConfiguration:開啓自動配置功能;以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啓自動配置功能;這樣自動配置才能生效;點擊查看它的詳細:

@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

2.1、@AutoConfigurationPackage:自動配置包

@Import({Registrar.class})
public @interface AutoConfigurationPackage {

2.1.1、@Import(Registrar.class):Spring的底層註解@Import,給容器中導入一個組件;導入的組件由
AutoConfigurationPackages.Registrar.class 將主配置類(@SpringBootApplication標註的類)的所在包及下面所有子包裏面的所有組件掃描到Spring容器;

3、@Import(EnableAutoConfigurationImportSelector.class)

       EnableAutoConfigurationImportSelector:是導入哪些組件的選擇器;將所有需要導入的組件以全類名的方式返回;這些組件就會被添加到容器中;會給容器中導入非常多的自動配置類(xxxAutoConfiguration);就是給容器中導入這個場景需要的所有組件,並配置好這些組件; 可以debug查看它父類  AutoConfigurationImportSelector 的方法:selectImports

有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader);

       Spring Boot在啓動的時候從類路徑下的  META-INF/spring.factories  中獲取 EnableAutoConfiguration 指定的值,將這些值作爲自動配置類導入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;
       J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;

4、使用Spring的創建嚮導快速創建一個SpringBoot工程

File ——》new ——》Project:

 

一路next,直到完成即可,會自動創建好工程,結構如下:

主程序已經生成好了,我們只需要我們自己的邏輯
       resources文件夾中目錄結構
             static:保存所有的靜態資源; js css images;
             templates:保存所有的模板頁面;(Spring Boot默認jar包使用嵌入式的Tomcat,默認不支持JSP頁面);可以使用模板引擎(freemarker、thymeleaf);
             application.properties:Spring Boot應用的配置文件;可以修改一些默認設置;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章