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

SprintBoot深入淺出講解場景啟動器Starter

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

1 場景啟動器 starter 簡介

什么是 SpringMVC

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

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

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

M 代表 模型(Model)

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

V 代表 視圖(View)

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

C 代表 控制器(controller)

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

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

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

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

什么是 SpringBoot 場景啟動器 starter

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

依賴導(dǎo)入問題

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

配置繁瑣

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

SpringBoot 的啟動器就是解決上述兩個問題的。

2 SpringBoot 場景啟動器的原理

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

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

自動配置原理

自動配置類的獲取與注入

我們從主程序入口來探索一下整個過程的原理:

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

@SpringBootApplication 相當(dāng)于

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

@EnableAutoConfiguration 注解

激活自動配置注解包含了兩個部分:

  • @AutoConfigurationPackage
  • @Import(AutoConfigurationImportSelector.class)

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

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

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

Spring Factories 文件

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

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

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

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

3 總結(jié)

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

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

您可能感興趣的文章:

相關(guān)文章

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

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

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

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

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

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

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

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

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

    基于ArrayList初始化長度的作用及影響

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

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

    這篇文章主要介紹了JDK8新特性——Lambda表達(dá)式的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)JAVA開發(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 和配置文件,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Spring Boot使用和配置Druid

    Spring Boot使用和配置Druid

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

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

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

最新評論