• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 01-01-CGB-SPRINGBOOT入門-01

    1 Spring Boot 簡介
    1.1 Spring Boot 概述
    現在軟件市場已經形成一定的規模,系統架構的復雜度也越來越高(例如有單體架構,分布式架構,微服務架構)。軟件的整個架構體系正在發生很大變化,在這種變化中,企業現在更注重技術的開箱即用,更注重技術在生態圈中的深度融合,更注重輕量級的運維。由此spring boot誕生。

    說明:學技術一定要了解技術發展史,并對技術的發展有一定的前瞻性。
    1.2 Spring Boot 核心特性
    Spring boot是一個腳手架,構建于Spring框架(Framework)基礎之上,基于快速構建理念,提供了自動配置功能,可實現其開箱即用特性(創建完一個基本的項目以后,可零配置或者少量配置即可運行我們的項目),其核心主要有如下幾個方面:
    起步依賴(Starter Dependency)-項目創建時底層幫你關聯依賴。
    自動配置(Auto Configuration)。
    健康檢查(Actator)-監控。
    其中,Spring Boot官方地址為https://spring.io/projects/spring-boot。

    2 Spring Boot 環境配置
    2.1 準備工作
    工具下載
    下載JDK1.8,并進行環境變量配置(假如已有則無需再次下載和配置)。
    下載最新maven(例如apache-maven-3.6.3,網址http://maven.apache.org/)并解壓。
    下載sts最新版(例如sts-4.4.5.RELEASE,網址https://spring.io/tools)并解壓(新版本下載下來時一個.jar文件,需要在jar文件所在的目錄中,以命令行方式執行java -jar 下載的文件名的方式進行解壓,如圖-1所示(需要首先啟動系統自帶的命令行客戶端,然后切換到軟件所在目錄,cd指令為切換目錄的意思)。
    在這里插入圖片描述
    工作區準備:定義新的工作區(要求沒有中文目錄),例如d:/TCGBIII/WORKSPACE。
    建議:將下載的所有文件存儲到同一目錄并解壓,例如d:/TCGBIII/TOOLS目錄。要求目錄不要有中文,也不要有特殊符號(例如&等)。

    2.2 Maven基本配置
    打開maven中的setting.xml文件,并對其如下選項進行配置。
    配置maven本地庫(從maven遠程服務器下載的資源存儲到的位置)
    ${user.home}/.m5/repository
    配置maven私服(配置到mirrors標簽內部)。

    aliyun aliyun for maven * https://maven.aliyun.com/repository/public

    配置maven中的profile(配置到profiles標簽內部),設置JDK編譯和運行版本。

    jdk-1.8 true 1.8

    2.3 STS整合maven配置
    啟動STS工具(特殊的eclipse,添加了spring開發插件),如圖-2所示
    在這里插入圖片描述
    Maven Installations配置, 如圖-3所示:
    在這里插入圖片描述
    Maven User Settings配置,如圖-4所示:

    在這里插入圖片描述
    項目工作區編碼設置,如圖-5所示
    在這里插入圖片描述
    2.4 STS工具使用基本優化(可選)
    禁用拼寫檢查,取消圖-6所示的拼寫檢查選項。
    在這里插入圖片描述
    取消圖-7所示的連接選項配置。
    在這里插入圖片描述
    在這里插入圖片描述
    修改STS工具內存配置,打開SpringToolSuite4.ini文件,修改堆大小,如圖-9所示:
    在這里插入圖片描述
    3 Spring Boot 快速入門
    3.1 項目創建及結構分析
    打開STS 集成開發工具,創建spring boot項目,其具體步驟如下:
    第一步:打開項目新建窗口(快捷鍵ctrl+n), 搜索spring,選擇spring starter 項目。如圖-10所示:
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述
    在圖-12中點擊finish之后,項目便開始從maven配置中指定的私服服務器(例如阿里云的maven服務器)去下載起步依賴(SpringBoot項目中默認指定了項目啟動時需要的一些jar包依賴),這個過程可能會比較耗時(網絡最好不要用手機網絡,會導致很多資源下載不下來),假如指定版本的springboot項目以前創建過,它會默認先從本地庫查找,假如本地庫沒有,則從遠程庫去下載。
    項目創建成功以后,其包視圖(Package Explorer)結構,如圖-13所示:
    在這里插入圖片描述
    其中,在圖-13呈現的CGB-SBOOT-01項目結構中,所有的類和配置文件都是創建好項目以后,由STS工具幫我們自動創建的。(假如你是普通的maven項目,這些類還有配置文件需要我們自己手動創建)
    3.2 項目啟動過程分析(了解)
    找到項目的入口類(使用了@SpringBootApplication注解描述),然后運行啟動類,檢測啟動過程,SpringBoot在啟動時,控制臺會出現如圖-14標識:
    在這里插入圖片描述
    ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200912124056316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FidTEyMTY=,size_16,color_FFFFFF,t_70#pic_center
    項目啟動時發生了什么呢?我在這里畫了張圖幫大家進行一下分析,如圖-15所示:
    在這里插入圖片描述
    SpringBoot 項目在啟動時,首先基于啟動入口類上的注解描述,進行自動配置并掃描指定包以及子包中的類進行加載,然后檢測類上是否有Spring框架中指定的注解描述(例如@Component,@Controller,@Service等)。假如有,則將類交給Spring框架中的BeanFactory工廠接口的實現類對象,此工廠對象會基于反射創建Bean的實例,假如此Bean指定了生命周期方法,還會調用生命周期方法。當實例創建以后,Spring框架還會基于類的作用域描述,將實例存儲到不同作用域的容器中。以實現Bean對象的科學應用。
    3.3 項目業務初步實現及測試
    業務實現:
    基于SpringBoot腳手架(或者架子工),通過Spring框架進行Bean對象的管理實現。

    第一步:創建一個DefaultCache類,存儲到src/main/java目錄,然后交給spring管理。

    package com.cy.pj.common.cache;
    @Component

    public class DefaultCache {}

    其中,@Component是Spring中用于描述Bean類的一個注解。用于告訴Spring這個類的實例由Spring創建,當此對象由Spring創建和管理時,默認會將對象存儲到池(Bean池)中。

    第二步:添加sringboot 測試類,進行bean的獲取及測試,要放在src/test/java目錄
    中:
    package com.cy.pj.common.cache;
    @SpringBootTest
    public class DefaultCacheTests {// is a Object
    @Autowired
    private DefaultCache defaultCache;//has a
    @Test
    public void testCache() {
    //use a system
    System.out.println(defaultCache);
    }
    }

    其中:
    @SpringBootTest 注解用于告訴spring框架,此測試類交給spring管理。
    @Autowired注解描述屬性時,用于告訴spring框架要為此屬性注入一個值?(至于注入規則,后面課程慢慢加強)
    第三步:代碼設計及運行分析,如圖-16所示:
    在這里插入圖片描述
    在圖-16中描述了DefaultCacheTests類與DefaultCache類的關系,這兩個類通過指定注解(@SpringBootTest,@Component)進行了描述,其意圖是告訴spring框架這個兩個類的實例的創建由Spring負責,并且由Spring框架基于@Autowired注解的描述完成DefaultCacheTests實例中有關DefaultCache類型的值的注入(DI)。

    第四步:為對象設計作用域,設置延遲加載,設置生命周期方法(了解)。
    在Spring框架中,Spring為由它創建和管理的對象,設計了一些特性,例如作用域,延遲加載,生命周期方法等,基于這些特性實現對Bean對象的管理。
    package com.cy.pj.common.pool;
    @Component

    @Scope(“singleton”)
    @Lazy

    public class ObjectPool {
    public ObjectPool() {
    System.out.println(“ObjectPool()”);
    }
    @PostConstruct
    public void init() {
    System.out.println(“init()”);
    }
    @PreDestroy
    public void destory() {
    System.out.println(“destory”);
    }
    }
    其中:
    @Lazy注解用于描述類,其目的是告訴spring框架此類支持延遲加載,通常會配合單例作用域使用。
    @Scope 是Spring中用于定義Bean對象作用域的一個注解,其常用的值有
    singleton(整個內存有一份Bean實例,此實例何時創建與類的延遲加載特性配置有關,此實例創建以后,生命周期會由spring框架管理),prototype(每次獲取都會創建新實例,此實例會在需要時創建與lazy特性無關,這個實例創建以后,不會交給spring管理,spring可以對其初始化,但不負責銷毀。)等。
    @PostConstruct 注解用于描述bean對象生命周期方法中的初始化方法,此方法會在對象的構造方法之后執行(是對象創建以后的初始化)。
    @PreDestroy 注解用于描述Bean對象生命周期方法中的銷毀方法,此方法會在對象銷毀之前執行(當作用域為prototype時,此方法不會執行)。

    第五步:通過測試類測試作用域,延遲加載,生命周期方法。
    package com.cy.pj.common.cache;
    @SpringBootTest
    public class ObjectPoolTests {
    @Autowired
    private ObjectPool objectPool;
    @Test
    public void testObjectPool() {
    //???
    }
    }

    通過對上面小節的學習,能說說Spring框架管理Bean對象有什么優勢嗎?(面試)

    Spring 是一個資源整合框架(Framework),通過spring可將很多資源(自己寫的對象或第三方提供的對象,例如連接池等)整合在一起,然后進行科學應用,以便更好的對外提供服務。如圖-17所示:
    在這里插入圖片描述
    在圖-17中,Spring框架可以為由它管理的對象(Bean)提供懶加載策略(對象暫時用不到,則無需加載和實例化),作用域(例如singleton-頻繁用時可以考慮內存中只有一份,prototype-使用次數少時可以用時創建,不用時銷毀),生命周期方法(更好實現對象的初始化和資源銷毀),以實現對象對系統資源的有效使用。同時Spring框架還可以基于用戶設計管理對象與對象的依賴關系,以降低對象與對象之間的直接耦合,提高程序的可維護性和可擴展性。

    3.4 項目業務增強實現及測試
    假如一個接口的實現類的對象有多個,并且這些對象都交給了Spring管理,那么假如
    另外一個類,現在依賴于這個接口,那么Spring如何為接口引入注入值?
    第一步:定義業務Cache接口.
    package com.cy.pj.common.cache;
    public interface Cache {

    }
    第二步:定義WeakCache實現Cache接口.

    第三步:package com.cy.pj.common.cache;

    import org.springframework.stereotype.Component;

    @Component

    public class WeakCache implements Cache{

    }
    創建或修改SoftCache,讓此類也實現Cache接口,關鍵代碼如下:
    package com.cy.pj.common.cache;

    @Component
    public class SoftCache implements Cache{

    }

    第四步:單元測試類

    package com.cy.pj.common.cache;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.test.context.SpringBootTest;
    @SpringBootTest

    public class CacheTests {
    @Autowired
    @Qualifier(“softCache”)
    private Cache cache;

    @Test
    public void testCache() {
    	System.out.println(cache);
    }
    

    }

    業務測試運行原理分析,如圖-18所示:
    在這里插入圖片描述
    思考:
    @Autowired注解應用規則?
    @Qualifier注解的作用是什么?

    @Autowired由spring框架定義,用于描述類中屬性或相關方法(例如構造方法)。Spring框架在項目運行時假如發現由他管理的Bean對象中有使用@Autowired注解描述的屬性或方法,可以按照指定規則為屬性賦值(DI)。其基本規則是:首先要檢測容器中是否有與屬性或方法參數類型相匹配的對象,假如有并且只有一個則直接注入。其次,假如檢測到有多個,還會按照@Autowired描述的屬性或方法參數名查找是否有名字匹配的對象,有則直接注入,沒有則拋出異常。最后,假如我們有明確要求,必須要注入類型為指定類型,名字為指定名字的對象還可以使用@Qualifier注解對其屬性或參數進行描述(此注解必須配合@Autowired注解使用)。具體過程可參考圖-18的設計進行自行嘗試和實踐。
    4 Spring Boot 小節總結
    4.1 重難點分析
    Spring boot 是什么? (框架,也可以看成是框架腳手架,做了架子工要做的事情-搭建項目基礎骨架的工作人員)
    Spring boot 核心優勢?(啟動依賴,自動配置-開箱即用,健康檢查-系統監控)
    Spring boot 項目的創建方式?( https://start.spring.io)
    Spring boot項目啟動時,Bean的初始化過程是怎樣的?(查找,加載,讀和存儲配置,創建和存儲實例對象)
    Spring boot 項目啟動時,Bean對象的依賴注入過程是怎樣的?(標記,查找,注入)
    Spring 框架中的Bean對象有什么特性?(延遲加載,作用域,生命周期方法)
    Spring 框架中單例(singleton)作用域對象特點,應用場景(頻繁用)?
    Spring 框架中多例(prototype)作用域對象特點,應用場景(稀少用)?
    4.2 FAQ分析
    Maven工具(項目構建工具)從哪里下載?(maven.apache.org)
    STS(集成了spring插件的eclipse)工具從哪里下載?(spring.io/tools)
    STS新版本怎么安裝?(例如STS4.5.0的安裝可使用:java -jar xxx.jar)
    創建spring starter 項目時pom.xml文件錯誤?(maven私服,本地庫,maven update,網絡)
    Spring Boot項目中支持的配置文件后綴有哪些?(.properties,.yml)
    SpringBoot 啟動類的包掃描位置?(啟動類所在包以及子包)
    SpringBoot項目中可以有多個啟動類嗎?(不可以)
    如何理解Spring框架?(資源整合框架,科學應用對象-資源,低耦合)
    Spring管理bean對象時有什么優勢?(為bean賦予了更加高級的特性,懶加載,單例作用域,生命周期方法)
    Spring 框架中@Autowire注解描述屬性時,依賴注入的規則是怎樣的?
    Spring 框架學習過程中學到了什么思想?(IOC,DI,池,低耦合,…)
    Spring容器中bean名字不同,但類型相同的單例作用域配置可以有多個實例嗎?

    4.3 BUG分析
    Maven項目的setting文件配置錯誤,如圖-19所示:
    在這里插入圖片描述
    問題分析:檢查maven目錄中的settings.xml的標簽語法配置是否正確.

    創建項目時網絡連接超時,如圖-20所示:
    在這里插入圖片描述
    問題分析:
    1)域名解析問題(與當地的域名服務器有關)
    2)網絡阻塞問題(帶寬有限,單同時的請求數量比較多)
    3)服務器線程有限(例如tomcat端線程數量配置的相對較少)
    Maven項目的pom.xml文件報錯,如圖-21所示:
    在這里插入圖片描述
    問題分析:
    檢查網絡配置(是否網絡暢通,不能手機網絡)
    檢測maven配置是否正確(嚴格按文檔配置執行)。
    右鍵項目maven update 強制更新。
    更換maven私服倉庫(選文檔中的)
    空指針異常(NullPointerException-NPE),如圖-22所示:
    在這里插入圖片描述
    問題分析:分析錯誤描述,找到自己寫的類指定行號位置,看看哪個對象在進行方法調用,調用方法的對象有沒有被賦值。
    依賴注入失敗,如圖-23所示:
    在這里插入圖片描述
    問題分析:
    檢查錯誤代碼中自己定義的類(例如DefaultCacheTests)中的屬性
    基于錯誤分析,哪個屬性的值在進行依賴注入時失敗了(例如DefaultCache)
    檢查注入失敗的屬性對應的對象是否交給了Spring管理(例如是否有特定注解描述,包結構是否正確)。

    找不到對應的Bean對象,如圖-24所示:
    在這里插入圖片描述
    問題分析:
    檢查你獲取的這個對象實例的類型是否使用了特定注解描述(如@Component)
    檢查你獲取的這個對象實例的類型所在的包是否正確(啟動類包結構)
    假如是基于Bean的名字進行Bean對象的獲取,要檢測Bean的名字是否正確。
    依賴注入失敗,如圖-25所示:
    在這里插入圖片描述
    問題分析:
    檢查哪里對Cache進行了引用。
    檢查對Cache引用時使用的注解描述。
    檢查容器中Cache接口下實現類對象的定義(是否有多個?)。

    版權聲明:本文為abu1216原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/abu1216/article/details/108548011

    智能推薦

    Hibernater入門-01

    框架和CRM項目的整體介紹 什么是CRM CRM的模塊 模塊的具體功能 Hibernate框架的學習路線 Hibernate框架的概述 Hibernate框架的概述 什么是ORM(對象關系映射) Hibernate優點 Hibernate框架的快速入門 案例一:完成客戶的CRUD的操作 需求分析 第一步:下載Hibernate5的運行環境 第二步:創建表結構 第三步:搭建Hibernate的開發環...

    XML入門01

    XML:可擴展的標記語言 用來保存數據 可以用來做配置文件 數據傳輸載體 version:解析這個xml的時候,使用什么版本的解析器解析 encoding:解析xml中的文字的時候,使用什么編碼來編譯 standalone:no 該文檔會依賴關聯其他文檔;yes 這是一個獨立的文檔 幾個非法字符:&lt; <    &gt; >  &nbs...

    01、Hibernate入門

    一、hibernate是什么 1. 框架是什么? 1.框架是用來提高開發效率的 2.封裝了好了一些功能.我們需要使用這些功能時,調用即可.不需要再手動實現. 3.所以框架可以理解成是一個半成品的項目.只要懂得如何駕馭這些功能即可. 2.hibernate框架是什么 3.hibernate的好處 操作數據庫的時候,可以以面向對象的方式來完成.不需要書寫SQL語句 4.hibernate是一...

    django入門01

    1.首先安裝django 2.創建項目 從命令行cd到您要存儲代碼的目錄,然后運行以下命令: 文件解釋: 1.外部第一個myweb/ 根目錄只是一個項目的容器,是項目的主目錄文件,隨便命名 2.manage.py 一個命令行實用程序,可以讓運行該文件的方式與Django項目進行交互 3.內部的第二個myweb/目錄是項目的實際Python包,包括默認的幾個文件 myweb/init.py 一個空的...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    猜你喜歡

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    精品国产乱码久久久久久蜜桃不卡