SprintBoot深入淺出講解場景啟動器Starter
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)文章
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-07spring cloud gateway跨域全局CORS配置方式
這篇文章主要介紹了spring cloud gateway跨域全局CORS配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Mybatis-plus插入數(shù)據(jù)遇到主鍵沒有默認(rèn)值的情況
這篇文章主要介紹了Mybatis-plus插入數(shù)據(jù)遇到主鍵沒有默認(rèn)值的情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11