本文屬於原創,轉載註明出處,歡迎關注微信小程序小白AI博客
微信公衆號小白AI
或者網站 https://xiaobaiai.nethtml
[TOC]java
在上一篇文章中咱們已經詳解介紹了Spring boot
相關的概念、特性以及周邊知識,這一篇文章咱們繼續深刻。咱們知道Spring boot
是一個入口,利用Spring Boot
提供的核心組件能夠很方便的、快速的
(Boot)建立或配置實際項目,接下來咱們來了解Spring boot
都包含了哪些核心模塊(組件),以及Spring boot
是如何運轉起來的,最後經過一個實際的Hello World
項目來講明。git
名詞術語 | 釋義 |
---|---|
CLI | 命令行界面,command-line interface |
Marven | Apache Maven是一個軟件項目管理和綜合工具,構建自動化系統(如Make,CMake)。基於項目對象模型(POM)的概念,Maven能夠從一箇中心資料片管理項目構建,報告和文件。Maven簡化和標準化項目建設過程,處理編譯,分配,文檔,團隊協做和其餘任務的無縫鏈接。 Maven增長可重用性並負責創建相關的任務;Marven擁有依賴管理功能,它經過簡單的配置就能夠自動從網絡上下載項目所需的依賴 |
POM | 項目對象模型(Project Object Model),它是Maven項目中的文件,使用XML表示,名稱叫作pom.xml;該文件用於管理:源代碼、配置文件、開發者的信息和角色、問題追蹤系統、組織信息、項目受權、項目的url、項目的依賴關係等;Maven世界中,project能夠什麼都沒有,甚至沒有代碼,可是必須包含pom.xml文件 |
Gradle | Gradle是一個徹底開源的構建自動化系統,使用特定編程語言Groovy來書寫配置文件,不一樣於Marven使用XML。如Android開發IDE Android Studio默認就是使用Gradle來構建項目;Gradle與Maven相比更爲靈活,簡單。 |
Groovy | Groovy是一種基於JVM(Java虛擬機)的敏捷開發語言,最終會編譯成JVM字節碼,它是一種動態編程語言,便可以面向對象編程,也能夠用做純粹的腳本語言,它結合了Python、Ruby和Smalltalk的許多強大的特性,Groovy 代碼可以與 Java 代碼很好地結合,也能用於擴展示有代碼。因爲其運行在 JVM 上的特性,Groovy也可使用其餘非Java語言編寫的庫。像 Kotlin, Scala也都是工做在JVM之上的;語法跟Java語法特別類似;Apache2.0受權;不像Java,全部依賴包是默認導入的; |
Spring IoC容器 | 它是Spring框架的核心。IoC容器從XML文件,Java註解或Java代碼接收元數據。容器經過讀取提供的配置元數據,從簡單的普通Java對象(Plain Old Java Objects, POJO)獲取有關要實例化,配置和組裝哪些對象的指令。這些經過此過程建立的對象稱爲Spring Beans。 |
JDK8 | JDK8或者JDK1.8是因爲自從JDK1.5/JDK5命名方式改變後遺留的新舊命令方式問題。因此JDK8或者JDK1.8也是同一個東西。 |
STS | Spring Tool Suite |
Spring Boot
主要幾個核心模塊:github
💡 下面的操做看不懂或者理解很模糊,先別慌,後面會深刻講解的。由於我如今本身也沒完全搞懂,怕帶歪大家,都是摘取官方文檔中彙總而來的。
1) SpringApplication 類:web
該模塊其中的SpringApplication
類可用於從Java main
方法引導和啓動Spring應用程序。默認狀況下,該class將執行如下步驟來引導應用程序:spring
ApplicationContext
實例(取決於你的類路徑)CommandLinePropertySource
以將命令行參數公開爲Spring的屬性(properties)ApplicationContext
),加載全部單例beanCommandLineRunner
bean在大多數狀況下,能夠直接從主方法中調用靜態run(Class, String [])
方法來引導應用程序:數據庫
@Configuration @EnableAutoConfiguration public class MyApplication { // ... Bean definitions public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
對於更高級的配置,能夠在運行以前建立和定製SpringApplication
實例:apache
public static void main(String[] args) { SpringApplication application = new SpringApplication(MyApplication.class); // ... customize application settings here application.run(args) }
SpringApplications
能夠從各類不一樣的來源讀取beans。一般建議使用單個@Configuration
類來引導你的應用程序,可是,你也能夠從如下位置設置來源:編程
AnnotatedBeanDefinitionReader
加載的徹底限定的類名XmlBeanDefinitionReader
加載的XML資源的位置,或GroovyBeanDefinitionReader
加載的groovy
腳本ClassPathBeanDefinitionScanner
掃描的軟件包的名稱配置屬性(Configuration properties)也綁定到SpringApplication
。這樣就能夠動態設置SpringApplication
屬性,例如用於指示Web環境的標記(" spring.main.web-application-type=none")或其餘來源("spring.main.sources" -a CSV list
)。標誌以關閉banner("spring.main.banner-mode=off")。小程序
2) 提供嵌入式Web應用程序,使用可選擇容器(Tomcat,Jetty或Undertow)
3) 一流的外部化配置支持
4) 方便的ApplicationContext
初始化程序,包括對合理的日誌記錄默認值的支持
總之, 就是spring-boot
模塊對應用程序的初始化、配置、啓動以及提供可選WEB運行容器有着很好的支持。
Spring Boot Starters
是Spring Boot Framework
的主要關鍵功能或組件之一。Spring Boot Starter
的主要職責是將一組常見或相關的依賴項組合爲單個依賴項,從而能夠自動化導入所有依賴。
例如,咱們想用Tomcat WebServer
開發一個Spring WebApplication
。而後,咱們須要在Maven
的pom.xml
文件或Gradle
的build.gradle
文件中添加如下最小jar
依賴項
若是還須要添加一些數據庫內容,則須要添加與數據庫相關的jar,例如Spring JDBC jar
文件,Spring ORM jar
文件,Spring Transaction Jar
文件等。
最後,咱們須要在構建文件中定義不少依賴項,對於開發人員而言,這是很是繁瑣且繁瑣的任務,並且它還會增長咱們的構建文件大小。有什麼解決方案能夠避免在構建文件中出現如此多的依賴項定義?解決方案是Spring Boot Starter
組件。Spring Boot Starter
組件將全部相關的jar
組合到單個jar
文件中,所以咱們只須要將jar
文件依賴項添加到咱們的構建文件中。無需將上述這麼多個jar文件添加到咱們的構建文件中,咱們在Spring boot
中利用Spring Boot Starter
特性,須要添加一個而且僅添加一個jar文件:spring-boot-starter-web
jar文件就能夠了。當咱們將spring-boot-starter-web
jar文件依賴項添加到咱們的構建文件中時,Spring Boot Framework
將自動下載全部必需的jar
並添加到咱們的項目類路徑中,以下圖所示。
總結下來,sping-boot-staters的主要優勢就是:
在沒有Spring Boot
出來以前,好比使用Spring MVC
框架開發應用須要大量配置,XML各類配置,註解滿天飛(我沒親身經歷過,不過特地去查了下,確實),到了Spring boot
這裏如何解決,那就是spring-boot-autoconfigurator
模塊了。它主要職責是減小Spring配置。若是咱們在Spring Boot
中開發Spring應用程序,那麼咱們就不須要定義單個XML配置,而幾乎不須要或只需不多的Annotation
(註解)配置。Spring Boot AutoConfigurator
組件將負責提供這些信息。
舉個例子,若是咱們在項目構建文件中使用"spring-boot-starter-web" jar文件,則Spring Boot AutoConfigurator
將自動解析視圖(views),視圖解析器(view resolvers)等。並且,Spring Boot
減小了註釋配置的定義。若是咱們在類級別使用@SpringBootApplication
註釋,那麼Spring Boot AutoConfigurator
將自動
將全部必需的註釋添加到Java類ByteCode中。
若是咱們閱讀Spring Boot Documentation
,咱們能夠爲@SpringBootApplication
找到如下定義。
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters={@ComponentScan.Filter(type=CUSTOM,classes=TypeExcludeFilter.class),}) @ConfigurationPropertiesScan public @interface SpringBootApplication
也就是說,@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiration
。
簡而言之,
Spring Boot Starter
減小了構建的依賴性,而Spring Boot AutoConfigurator
減小了Spring配置。Spring Boot Starter
依賴於Spring Boot AutoConfigurator
,Spring Boot Starter
自動觸發Spring Boot AutoConfigurator
。Spring Boot CLI
(命令行界面)是一種Spring Boot
軟件,用於從命令提示符下運行和測試Spring Boot
應用程序。Spring命令行應用程序能夠編譯並運行Groovy
源代碼(採用"spring"命令),這使得編寫絕對的最少代碼以使應用程序運行變得很是容易。Spring CLI
還能夠監視文件,並在文件更改時自動從新編譯並從新啓動。
spring 命令行示例:
spring run HelloWorld.groovy
具體的Spring Boot CLI工具怎麼安裝和使用,下面咱們會具體討論。
Spring Boot Actuator
有不少功能,可是主要的功能就是:
Spring Boot Actuator
提供了執行器端點所需的基礎架構。它包含對執行器端點的註釋支持。開箱即用。HealthEndpoint
,EnvironmentEndpoint
,BeansEndpoint
等。當咱們使用CLI運行Spring Boot Web
應用程序時,Spring Boot Actuator
會自動提供主機名"localhost"和默認端口號"8080"。咱們可使用"http://localhost:8080 /"端點訪問此應用程序。可是咱們實際上使用HTTP請求方法(例如GET和POST)來使用Spring Boot Actuator
表示管理端點。後面咱們再來詳細瞭解Actuator吧。
💡上面大概知道了核心模塊都能幹些啥,不過具體細節的,咱們在實際工程中再來體會,除了上述核心模塊,另外有Spring Initilizr Web工具來快速配置生成一個Spring Boot項目。
瞭解Spring boot
是如何減小依賴和配置的原理,這是有必定必要的。瞭解Spring Boot
如何減小構建的依賴關係,Spring Configuration
等,Spring Boot
是如何在後臺運行的。
若是熟悉Groovy編程語言的話,那麼你會了解大多數內容。在Groovy
中,咱們不須要添加一些導入,也不須要在Groovy項目中添加一些依賴項。當咱們使用Groovy Compiler(groovyc)
編譯Groovy腳本時,它將自動添加全部默認導入語句,而後對其進行編譯。一樣,Groovy
編程語言包含一個JAR依賴關係解析器,用於解析全部必需的jar文件並將其添加到Groovy Project
類路徑。Spring Boot
在內部使用Groovy添加一些默認值,例如Default import
語句,Application main()
方法等。當咱們從CLI命令提示符運行Groovy腳本時,它使用此main()
方法運行Spring Boot Application
。
Grape
是嵌入式依賴關係解決方案引擎。Grape是嵌入Groovy的JAR依賴管理器。Grape讓咱們快速將maven
信息庫依賴項添加到咱們的項目類路徑中,以減小構建文件的定義。Spring Boot
框架編程模型主要是受Groovy編程模型啓發的。Spring Boot
框架在內部取決於這兩個主要組件:Groovy
和Grape
。
具體地能夠詳細瞭解Grape JAR依賴項管理器。
好了,上面說了這麼多,不容易,就是爲了作個鋪墊,讓咱們知道Spring boot
有哪些核心地東西,都是幹啥用的,接下來就正式進入實踐環節了,咱們從開發環境入手。
從Spring boot
官方提供的系統需求來看(Spring Boot 2.2.0):
構建工具
Servlet容器(能夠將Spring Boot
應用程序部署到任何Servlet 3.1+
兼容的容器中)
咱們選定相關軟件版本:
Spring Boot
。所以,在類路徑中包含相應的spring-boot-*.jar
文件便可。💡目前爲止已是JDK13了,這裏指的是OpenJDK,Oracle已經在2019年4月16日更改了Oracle JDK許可證(從Java11開始);另外Open JDK應用到生產環境已經通過驗證了的,沒有問題。 Spring Boot 2.2.0.RELEASE須要Java 8版本,而且與Java 13(包括)兼容;另外咱們可使用其餘IDE,例如IntelliJ IDEA,NetBeans或Eclipse,一樣,也可使用其餘構建工具,例如Gradle。
💡安裝JDK的方式能夠有多種,如在類Linux平臺中能夠經過安裝管理工具直接從遠程鏡像源拉取安裝;
配置JDK:
安裝好STS後,打開軟件-->Window
-->Preferences
-->Java
-->Installed JREs
:
配置Marven:
Marven在安裝好STS後,已經默認內部安裝了,不過想要另外指定Marven版本也是能夠的,打開STS-->Window
-->Preferences
-->Marven
-->Installations
-->Add
添加:
這一篇咱們開始從內部瞭解Spring boot
,從它的幾個核心模塊講起,知道了Spring boot
是如何減小組件依賴和簡化繁雜的配置的,以及講述了Spring boot
減小組件依賴和簡化繁雜配置的內部原理,最後開始進入Spring boot
實踐,完成了Spring boot
的開發環境搭建。至此,咱們開始慢慢走進Spring boot
。加油!
本文屬於原創,轉載註明出處,歡迎關注CSDNfreeape或微信小程序小白AI博客
微信公衆號小白AI
或者網站 https://xiaobaiai.net