當前位置:
首頁 > 最新 > 組件化系統快速應用之SpringBoot實踐,這些你都了解嗎?

組件化系統快速應用之SpringBoot實踐,這些你都了解嗎?

身為Java開發人員,不可能不知道spring,spring如此強大,但它的配置卻又讓人覺得無比繁雜,好在spring社區也意識到了這點,推出了可以大大簡化配置的SpringBoot,讓Spring的使用重新變得簡單,現在就讓我們來學習一下SpringBoot的相關知識,文章會先介紹SpringBoot的一些主要配置,然後通過一個demo來講解怎麼使用,最後簡單講解SpringBoot自動配置的過程。

1. SpringBoot的優點

儘可能自動配置spring應用;

沒有XML配置要求;

提供「starter poms」來簡化maven配置;

可創建獨立自運行的spring應用。

下面分別闡述。

1.1 儘可能自動配置

SpringBoot會根據項目中添加的jar依賴猜測開發人員想要如何配置Spring從而自動配置。例如若項目中依賴的jar里有spring-webmvc的包,那麼會自動創建並註冊相關的bean,如DispatcherServlet、viewResolver等,無需再手動在springMvc的xml配置文件中手動創建和註冊。

1.2 沒有XML配置要求

SpringBoot不推薦使用XML的spring配置,提倡使用編程式的JavaConfig方式(@Configuration等)進行配置,當然為了照顧更熟悉XML配置的開發人員,依然可以使用XML方式。

例如傳統XML方式的配置:

Java

對應的編程式配置:

Java

從以上對比可以看出@Configuation等價於,即相當於一個xml中的配置;@Bean等價於 ,其中@Scope默認情況下是singleton,使用了@Bean註解的方法的方法名就是bean在spring容器中的id。當然,若是XML配置無法避免,也可以通過如下方式引入XML:

Java

使用@ImportResource,引入在xml中配置的spring bean。

使用XML還是編程式配置哪種方式更好?見仁見智,個人更偏向編程式配置:

優點:

註冊bean更直觀; 更容易實現自動配置(starter)。

缺點:

配置更改,就必須重新編譯應用程序。但在如今容器化的大趨勢下,配置文件也是版本發布管理中的一環,更改配置文件也應該重新發布版本以方便回滾,因此這個缺點被弱化。

1.3 提供「starter poms」來簡化maven配置

SpringBoot提供了很多常用的配置,打包為starter,只要項目引入依賴即可使用,其中最常用的要數spring-boot-test-starter、spring-boot-web-starter、spring-boot-starter,其定義了很多常用jar的版本配置,項目中依賴的時候無需再指定版本,且SpringBoot保證這些版本的兼容性。

Java

1.4 可創建獨立自運行的spring應用

我們的大多數項目都是web項目,很多時候都是部署在一個外置的web容器比如tomcat中,SpringBoot除了支持此方式外,更可以打包一個可以自運行的、包含內嵌tomcat容器的部署包,無需外置的web容器,只要有jdk環境就可以運行。打包出來的jar或者war,只需要在命令行窗口中執行 java –jar xxxx.jar即可啟動一個web服務。

2. SpringBoot主要配置說明

下面介紹SpringBoot的幾個主要註解配置

2.1 主配置類上的@SpringBootApplication

Java

@SpringBootApplication

該註解只能出現一次,其使用了@EnableAutoConfiguration、@ComponentScan和@SpringBootConfiguration註解:

1) @EnableAutoConfiguration,說明啟用自動配置,此註解可以說是SpringBoot最智能的一個標籤,它告訴SpringBoot根據添加的jar依賴猜測你想如何配置spring,從而自動註冊bean,無需手動配置;

2) @ComponenScan, 配置掃描的包及其子包中所有配置例如@Configuration、@Component、@Service等,相當於XML配置中的 默認會掃描使用了@SpringBootApplication註解的類所在的包;

3) @SpringBootConfiguration,標識應用為一個SpringBoot應用,且使得自身成為了一個@Configuration,可以定義Bean。

Java

3. SpringBoot配置的例子

前面說了那麼多,也許還是一頭霧水,下面我們通過一個典型的例子來說明SpringBoot簡化配置的地方:maven構建的SpringMvc +Mybatis+Mysql資料庫的典型web框架配置。

3.1 新建Maven項目

設置parent為spring-boot-starter-parent、添加依賴。

之所以設置parent為spring-boot-starter-parent,是由於其定義了很多常用的artifact的版本,且SpringBoot保證這些版本之間的正常工作,例如截圖中關於mysql的驅動,我們就不用再指定版本了,因為spring-boot-starter-parent中已經定義。同時將tomcat的starter的依賴範圍設置為provided,這樣打包出來的war將不包含內嵌的tomcat。

3.2 編寫主配置類

@SpringBootApplication只能出現一次,scanBasePackages, 配置掃描的包及其子包, 默認會掃描使用了@SpringBootApplication註解的類所在的包;

@MapperScan是mybatis-spring提供的功能, 掃描mybatis的mapper介面所在的包,可放到其他使用@Configuration註解的配置類中;

主配置類繼承SpringBootServletInitializer類, 這樣生成的war可以放到外部tomcat中部署。

3. 3 主配置文件application.properties

SpringBoot默認讀取application.properties中的配置,讀取出的所有配置都放在Environment類的實例中; IDE中凡是可以自動化配置的項,IDE都會有提示和自動補全功能。關於application.properties的存放位置,有如下優先順序:

1) 與jar包同一目錄下的config文件夾中;

2) Jar包所在文件夾下;

3) 項目classpath下的config文件夾中;

3) classpath。

截圖中的配置,SpringBoot將會自動創建一個資料庫連接池,初始化SpringMvc的DispatcherServlet、ResourceHandler、日期格式,掃描mybatis映射文件等。

3.4 其他額外配置文件(若有)

其他配置放在額外的properties配置文件

然後通過以下方式引入:

通過@Configuration和@PropertySource引入。

3.5 其他XML方式配置的spring bean(若有)

其他自定義的spring xml配置可通過@Configuration和@ImportResource引入:

GIF

Java

3.6 demo配置小結

除了都需要的mybatis映射文件,以上就是一個使用maven構建的基於SpringMvc +Mybatis+Mysql資料庫的典型web框架配置,我們總結一下,要做的配置僅僅是以下3步:

1) 添加依賴

2)配置啟動類

src/main/java/com/jd/lzq/mainApp

3)配置文件

src/main/resources/application.properties

而反觀傳統的配置:

想想看相比傳統的基於XML配置的Spring項目,是不是簡化了很多!而這一切都是因為SpringBoot的@EnableAutoConfiguration。

以上是SpringBoot的配置入門,更多配置見官方文檔介紹:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

SpringBoot只是讓Spring的配置變得簡單,其底層依賴的還是Spring,我們依然要理解Spring的原理。

4. SpringBoot自動配置原理簡析

關於SpringBoot的@EnableAutoConfiguration自動配置機制,可以使用下圖看看流程,在此拋磚引玉,以後有機會再詳細講解。

Java

@EnableAutoConfiguration

其使用了註解:

@Import(EnableAutoConfigurationImportSelector)

在SpringBoot應用啟動過程中,EnableAutoConfigurationImportSelector類會調用SpringFactoriesLoader的load方法,從jar包中讀取META-INF/spring.factories文件,而該文件中定義了很多使用@Configuration註解的配置類,這樣就讀取到了starter包中定義的配置類。

@Configuration的解析:

由ConfigurationClassPostProcessor類來完成

其實現了BeanDefinitionRegistryPostProcessor介面, 該介面允許往spring容器中添加bean的定義,從而實現自動配置。我們也可以利用此原理,開發自定義的starter,實現公司內部常用組件的自動化配置。也正是藉此原理,SpringBoot提供了非常多的常用工具的starter, 且starter的數量依然在持續增加中,大大簡化了配置。例如我們常用的資料庫連接池druid,官方也提供了starter方便開發。

以上就是SpringBoot的介紹,其配置很簡單,但是功能很強大,適合當今微服務化要求快速開發、輕量化的趨勢,且實現的starter數量還在持續增加中,掌握其原理和用法,可以大大提高我們的開發效率。在使用過程中遇到問題,善於查詢官方文檔,也歡迎聯繫我們交流關於SpringBoot的使用。

Java學習資料獲取(複製下段連接至瀏覽器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Java開發分享 的精彩文章:

TAG:Java開發分享 |