欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SprintBoot深入淺出講解場(chǎng)景啟動(dòng)器Starter

 更新時(shí)間:2022年06月06日 14:23:45   作者:孟華328  
本篇文章將和大家分享一下 Spring Boot 框架中的 Starters 場(chǎng)景啟動(dòng)器的內(nèi)容,關(guān)于 Starters 具體是用來(lái)做什么的,以及在開(kāi)發(fā) Spring Boot項(xiàng)目前,要如何自定義一個(gè) Starters 場(chǎng)景啟動(dòng)器

1 場(chǎng)景啟動(dòng)器 starter 簡(jiǎn)介

什么是 SpringMVC

在早期 Java Web 的開(kāi)發(fā)中,統(tǒng)一把顯示層、控制層、數(shù)據(jù)層的操作全部交給 JSP 或者 JavaBean 來(lái)進(jìn)行處理,這樣的弊端有:

  • JSP 和 Java Bean 之間嚴(yán)重耦合,Java 代碼和 HTML 代碼也耦合在了一起
  • 要求開(kāi)發(fā)者不僅要掌握 Java ,還要有高超的前端水平
  • 前端和后端相互依賴,前端需要等待后端完成,后端也依賴前端完成,才能進(jìn)行有效的測(cè)試代碼難以復(fù)用

為了解決這些弊端,MVC 模式便應(yīng)運(yùn)誕生了。

M 代表 模型(Model)

模型是什么呢? 模型就是數(shù)據(jù),就是 dao,bean

V 代表 視圖(View)

視圖是什么呢? 就是網(wǎng)頁(yè), JSP,用來(lái)展示模型中的數(shù)據(jù)

C 代表 控制器(controller)

控制器是什么? 控制器的作用就是把不同的數(shù)據(jù)(Model),顯示在不同的視圖(View)上,

Spring MVC 就是 MVC 模式的一種。Spring MVC 是 Spring 提供的一個(gè)基于 MVC 設(shè)計(jì)模式的輕量級(jí) Web 開(kāi)發(fā)框架,本質(zhì)上相當(dāng)于 Servlet。

Java Servlet 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序,它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶端的請(qǐng)求和HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層

Spring MVC 角色劃分清晰,分工明細(xì)。由于 Spring MVC 本身就是 Spring 框架的一部分,可以說(shuō)和 Spring 框架是無(wú)縫集成。性能方面具有先天的優(yōu)越性,是當(dāng)今業(yè)界最主流的 Web 開(kāi)發(fā)框架,最熱門的開(kāi)發(fā)技能。

什么是 SpringBoot 場(chǎng)景啟動(dòng)器 starter

在了解完Spring MVC 的相關(guān)知識(shí)后,我們切入正題。SpringBoot 之所以引入場(chǎng)景啟動(dòng) starter,必定有其原因。使用過(guò)Spring 的朋友都知道,大量的特性配置,常常讓開(kāi)發(fā)人員頭疼萬(wàn)分。歸納起來(lái)有以下兩點(diǎn):

依賴導(dǎo)入問(wèn)題

每個(gè)項(xiàng)目都需要來(lái)單獨(dú)維護(hù)自己所依賴的jar包,在項(xiàng)目中使用到什么功能就需要引入什么樣的依賴。手動(dòng)導(dǎo)入依賴容易出錯(cuò),且無(wú)法統(tǒng)一集中管理

配置繁瑣

在引入依賴之后需要做繁雜的配置,并且這些配置是每個(gè)項(xiàng)目來(lái)說(shuō)都是必要的,例如web.xml配置(Listener配置、Filter配置、Servlet配置)、log4j配置、數(shù)據(jù)庫(kù)連接池配置等等。這些配置重復(fù)且繁雜,在不同的項(xiàng)目中需要進(jìn)行多次重復(fù)開(kāi)發(fā),這在很大程度上降低了我們的開(kāi)發(fā)效率。

SpringBoot 的啟動(dòng)器就是解決上述兩個(gè)問(wèn)題的。

2 SpringBoot 場(chǎng)景啟動(dòng)器的原理

在導(dǎo)入的starter之后,SpringBoot主要幫我們完成了兩件事情:

  • 相關(guān)組件的自動(dòng)導(dǎo)入
  • 相關(guān)組件的自動(dòng)配置

自動(dòng)配置原理

自動(dòng)配置類的獲取與注入

我們從主程序入口來(lái)探索一下整個(gè)過(guò)程的原理:

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

@SpringBootApplication 相當(dāng)于

可以看到,自動(dòng)配置的關(guān)鍵是@EnableAutoConfiguration 注解。

@EnableAutoConfiguration 注解

激活自動(dòng)配置注解包含了兩個(gè)部分:

  • @AutoConfigurationPackage
  • @Import(AutoConfigurationImportSelector.class)

首先,講一下 @AutoConfigurationPackage??匆幌略撟⒔獾亩x:

@AutoConfigurationPackage 包含了 @Import(AutoConfigurationPackages.Registrar.class)。這是一個(gè) Spring底層注解。向容器中注入一個(gè)Registrar,該Registrar會(huì)將@SpringBootApplication主配置類所在包下的所有類都掃描進(jìn)Spring容器中。

再看一下@EnableAutoConfiguration 的 @Import(AutoConfigurationImportSelector.class) 。這也是一個(gè)Spring底層注解。向容器中注入一個(gè)Selector,該Selector可以將要注入的一系列bean的全限定類名返回,并按照名稱將這些bean全部注入到容器中。

Spring Factories 文件

Spring Factories 是 SpringBoot 的擴(kuò)展機(jī)制之一,是基于 java SPI 。所謂SPI機(jī)制就是,為某個(gè)接口尋找服務(wù)實(shí)現(xiàn)的機(jī)制。有點(diǎn)類似IOC的思想,就是將裝配的控制權(quán)移到程序之外,在模塊化設(shè)計(jì)中這個(gè)機(jī)制尤其重要。

在 Spring 中也有一種類似與 Java SPI 的加載機(jī)制。它在 resources/META-INF/spring.factories 文件中配置接口的實(shí)現(xiàn)類名稱,然后在程序中讀取這些配置文件并實(shí)例化。

我們可以在spring-boot-autoconfigure包里,看一下spring.factories 文件。

在這里,我們可以看到SpringBoot官方為我們提供的所有自動(dòng)配置類的候選列表。

3 總結(jié)

  • SpringBoot在啟動(dòng)的時(shí)候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的所有自動(dòng)配置類的全限定類名。
  • 將這些自動(dòng)配置類導(dǎo)入容器,自動(dòng)配置類就生效,幫我們進(jìn)行自動(dòng)配置工作。
  • 整個(gè)J2EE的整體解決方案和自動(dòng)配置都在spring-boot-autoconfigure的jar包中。
  • 它會(huì)給容器中導(dǎo)入非常多的自動(dòng)配置類 (xxxAutoConfiguration), 就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有組件,并配置好這些組件。
  • 有了自動(dòng)配置類,免去了我們手動(dòng)編寫配置注入功能組件等的工作。

到此這篇關(guān)于SprintBoot深入淺出講解場(chǎng)景啟動(dòng)器Starter的文章就介紹到這了,更多相關(guān)SprintBoo場(chǎng)景啟動(dòng)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

    mybatis二級(jí)緩存的實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了mybatis二級(jí)緩存的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文)

    IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文)

    這篇文章主要介紹了IDEA下載并大學(xué)生edu郵箱認(rèn)證免費(fèi)使用教程(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • spring cloud gateway跨域全局CORS配置方式

    spring cloud gateway跨域全局CORS配置方式

    這篇文章主要介紹了spring cloud gateway跨域全局CORS配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況

    Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況

    這篇文章主要介紹了Mybatis-plus插入數(shù)據(jù)遇到主鍵沒(méi)有默認(rèn)值的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 基于ArrayList初始化長(zhǎng)度的作用及影響

    基于ArrayList初始化長(zhǎng)度的作用及影響

    這篇文章主要介紹了基于ArrayList初始化長(zhǎng)度的作用及影響,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 一文帶你入門JDK8新特性——Lambda表達(dá)式

    一文帶你入門JDK8新特性——Lambda表達(dá)式

    這篇文章主要介紹了JDK8新特性——Lambda表達(dá)式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JAVA開(kāi)發(fā),感興趣的朋友可以了解下
    2020-08-08
  • java追加寫入txt文件的方法總結(jié)

    java追加寫入txt文件的方法總結(jié)

    在本篇文章里我們給大家整理了關(guān)于java如何追加寫入txt文件的方法和代碼,需要的朋友們可以參考下。
    2020-02-02
  • 詳解Spring Boot 打包分離依賴JAR 和配置文件

    詳解Spring Boot 打包分離依賴JAR 和配置文件

    這篇文章主要介紹了Spring Boot 打包分離依賴JAR 和配置文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring Boot使用和配置Druid

    Spring Boot使用和配置Druid

    本篇文章主要介紹了Spring Boot使用和配置Druid,Druid號(hào)稱是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,并且能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能
    2017-04-04
  • Kotlin 和 Java 混合開(kāi)發(fā)入門教程

    Kotlin 和 Java 混合開(kāi)發(fā)入門教程

    這篇文章主要介紹了入門 Kotlin 和 Java 混合開(kāi)發(fā),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09

最新評(píng)論