日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot————简介与Spring时代的承接

發布時間:2025/3/12 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot————简介与Spring时代的承接 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言

最近,公司正在開發一個景區系統的項目,涉及到Spring Boot框架的使用,在此記錄下Spring Boot框架應該知道的基礎知識。

一、產生

SpringBoot是順應現在微服務(MicroServices)理念而產生的一個微框架(同類還有Dropwizard),用來構建基于Spring框架的標準化的獨立部署應用程序。

二、SpringBoot快速開始:

我們使用Maven構建項目,所以新建一個maven項目, pom.xml中添加如下兩個關鍵因素:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.2.5.RELEASE</version> </parent> ... <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> </dependencies>

使用spring-boot-starter-parent作為當前項目的parent可以享受到spring boot應用相關的一系列依賴(dependency), 插件(plugins)等裝備, 而添加spring-boot-starter-web這個依賴,則純粹是我們希望構建一個獨立運行的web應用而已(注意, 沒有version元素定義,因為spring-boot-starter-parent已經提供了相應的dependencyManagement)。有了以上配置,我們就可以按照SpringMVC的套路添加相應的Controller實現就可以了。

要讓Spring Boot可以獨立運行和部署,我們需要一個Main方法入口。

三、Spring Boot如何工作

3.1?Spring 特性回顧

3.1.1?XML配置與JavaConfig的選擇問題

SpringBoot倡導基于JavaConfig的形式來“裝配”應用, 但有些層面,我們還是希望根據公司的生態圈和基礎設施現狀,對其進行一些定制,以便更好的融入并享受一系列生態,而大部分要集成外部已有系統的時候, 通過xml集中明確化配置我認為是比較合適的做法。

總之, 這兩種方式不應該是東風壓倒西風,而應該根據情況來選擇。 從我的角度來講,我希望在SpringBoot里,除了Main入口類和autoscan相關的地方使用JavaConfig, 其它最好以xml配置。

3.1.2 @Configuration注解

@Configuration這個注解就是JavaConfig的典型代表。標注了這個注解的Java類定義,會以Java代碼的形式(對應于xml定義的形式)提供一系列的bean定義和實例。 結合AnnotationConfigApplicationContext自動掃描的功能,就可以構建一個基于Spring容器的Java應用。

一系列標注了@Configuration的Java類的集合,對應于“昨日”的一系列xml配置文件。

3.1.3 @ComponentScan注解

@ComponentScan對應xml時代的<context:component-scan>。用來掃描classpath下標注了相應注解的Bean定義,然后加載到Spring容器中。

一般配合@Configuration注解來使用,你可以將@Configuraiton做的事情是純手工定義bean然后添加到Spring容器, 而@ComponentScan則是自動收集bean定義并添加到Spring容器。

3.1.4 @Import注解

Spring容器的配置可以分散在多個物理存在的配置類或者配置文件中。

@Import允許將其它JavaConfig形式的配置類引入到當前的@Configuration標注的配置類當中, 對應于原來xml時代的<import/>, 甚至于也可以通過@ImportResource將xml形式定義的配置也引入當前JavaConfig形式的配置類當中。

3.1.5 @PropertySource注解

配合@Configuration使用, 用來加載.properties內容到Environment,比如:@PropertySource("classpath:/application.properties"),并需要容器中配置一個PropertySourcesPlaceholderConfigurer。

@PropertySource和@PropertySources的區別在于, 后者屬于前者的Aggregation類型, 在有多個.properties資源需要引入的情況下,如果能夠使用Java8的repeatable annotation特性,則只需要聲明多個@PropertySource就行了, 否則,作為fallback方案,使用@PropertySources然后再其中引用多個@PropertySource好了。

3.1.6 Environment和Profile

這兩個概念應該是Spring3時代引入的, Environment用來統一表達當前應用程序運行環境的概念,會以Properties的形式提供一系列該環境下的上下文信息,而且允許當前應用程序獲取activeProfile是哪個。
說實話,Environment的設計,我覺得到提供上下文信息這一關鍵職能就可以了, 而Profile的設計,則有些太過于Monolithic時代的做事風格。 Profile一般用來提供某些靈活性, 但這種靈活性是內部化的, 這意味著, 你的軟件實體需要知道外面可能提供多少種profiles, 然后在不同的profile下,我的軟件實體需要做什么樣的調整。 而實際上, 軟件實體從研發到交付和使用, 最好是在整條流水線上設計和生產都是一致, 只有“銷售”之前,才根據目標環境或者目標客戶調整“包裝”和配置, 然后“發貨”, 用戶拿到手的產品(當然包括我們搞的軟件產品)應該是開箱即用的, 這個產品既不會存在我不需要的功能,也不應該每次使用的時候先自己“很智能”的掃描一下上下文環境然后決定使用哪一個Profile。尤其是在微服務時代,隨著你服務數量的增長, 服務數量 * Environment數量 * 所謂的Profile數量更是指數級增長 3, 如果應用開發的時候還要考慮這么多,那出問題的幾率就更大了。
所以, 在Microservices時代,我們更建議外部化你的軟件產品差異化配置管理, 盡量減少Profile的濫用甚至不用(這就減少一個緯度的管理)。

3.2 對@EnableAutoConfiguration的理解

在本文之前提到的所有Annotation都屬于SpringFramework提供的, 現在要說的這個Annotation,即@EnableAutoConfiguration, 則屬于SpringBoot。
@EnableAutoConfiguration的定義信息如下:

@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Inherited @Import(value={org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector.class,org.springframework.boot.autoconfigure.AutoConfigurationPackages.Registrar.class}) public @interface EnableAutoConfiguration

標注了這個Annotation的配置類將觸發一系列動作, 也是SpringBoot“黑魔法”的核心, 魔法大體上是這樣發生的: SpringBoot一旦發現@EnableAutoConfiguration, 那么就使用Spring框架提供的SpringFactoriesLoader這個特性去掃描當前應用classpath下所有META-INF/spring.factories元信息配置, 然后根據當前使用場景需要, 加載符合當前場景需要的配置類型并供當前或者后繼流程使用, 對于@EnableAutoConfiguration的場景,就是提取以org.springframework.boot.autoconfigure.EnableAutoConfiguration作為key標志的一系列Java配置類,然后將這些Java配置類中的bean定義加載或者說灌入Spring容器中。
當然, EnableAutoConfiguration通過SpringFactoriesLoader篩選并加載進來的這些Java配置類里面,我們其實還可以進一步對要加載到容器的bean定義進行篩選, 這就會用Spring3系列引入的@Conditional“軍團”, 通過像@ConditionalOnClass, @ConditionalOnMissingBean等具體的類型和條件來進一步決定加載還是不加載哪些bean定義。

3.3 Enter Main

有了上面的這些“前戲”, 下面我們正式進入正題了...
每一個SpringBoot應用都有一個入口類,在其中定義main方法, 然后使用SpringApplication這個類來加載指定配置并運行SpringBoot應用程序, 在很多SpringBoot的介紹中,都會使用當前入口類既作為配置(標注@Configuration)又作為入口類, 比如我們的HellSpringBoot:

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

@SpringBootApplication等效于@Configuraiton + @EnableAutoConfiguration + @ComponentScan, 所以, 當我們將HelloSpringBoot.class作為JavaConfig配置類傳入SpringApplication.run方法之后, SpringApplication.run方法就知道從哪里加載并掃描必要的bean定義了。
現在,剩下的就是要搞清楚SpringApplication.run里面發生了什么。

鳴謝

《Spring Boot Rock’n’Roll》

總結

以上是生活随笔為你收集整理的Spring Boot————简介与Spring时代的承接的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。