SpringBoot(4) 與Spring的區別

學習了spring框架,不免需要將兩種框架進行比較。

Spring boot是一個在Spring 的基礎上搭建的全新的微框架,其目的是簡化Spring的搭建和開發過程。

SpringBoot的6個好處:

  1. Spring Boot可以建立獨立的Spring應用程序;
  2. 內嵌瞭如Tomcat,Jetty和Undertow這樣的容器,也就是說可以直接跑起來,用不着再做部署工作了。
  3. 無需再像Spring那樣搞一堆繁瑣的xml文件的配置;
  4. 可以自動配置Spring;(SpringBoot將原有的XML配置改爲Java配置,將bean注入改爲使用註解注入的方式(@Autowire),並將多個xml、properties配置濃縮在一個appliaction.yml配置文件中。)
  5. 提供了一些現有的功能,如量度工具,表單數據驗證以及一些外部配置這樣的一些第三方功能;
  6. 提供的POM可以簡化Maven的配置;((開發庫,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以簡化Maven的配置。當我們引入核心依賴時,SpringBoot會自引入其他依賴。)

關於執行順序:

如果把SpringBoot應用打成jar包時,那麼應用內部默認嵌入了Servlet容器。應用啓動執行順序如下:

  • 執行SpringBootApplication的Run方法;
  • 啓動IOC容器;
  • 創建嵌入式Servlet容器;

若把SpringBoot應用打成war包時,那麼與Spring在Servlet容器中啓動執行是一樣的。啓動執行順序如下:

  • 啓動Servlet容器;
  • 服務器啓動SpringBoot應用;
  • 啓動IOC容器;

關於springboot與SSM框架全註解開發的區別:

(問這個問題的前提是springboot與SSM全註解開發都是將原有的xml配置改爲Java配置,將bean注入 改爲 註解注入的過程)

想知道 starter 依賴爲我們做了哪些,我們首先看搭建 SSM 框架時,我們需要哪些步驟

1.加相關的 jar 包

2.配置 web.xml,加載 Spring,SpringMVC

3.配置數據庫連接,spring 事務

4.配置加載配置文件的讀取,開啓註解

5.配置日誌文件

6.配置完成,部署 tomcat 調試

實際上在完成上述的六步需要花費大量的時間:關鍵在於建這個項目有很多難點,如 包之間的相互依賴,不確定中間有沒有衝突,升級版本可能也會導致衝突,bean 配置數據源,事務,切面時,依賴關係搞不清楚。

springboot爲什麼這麼快呢?

springboot 爲何能如此快的創建一個項目呢,難道它不需要配置 bean 嗎,難道它不需要引入 jar 包嗎。當然,這些都是需要的,它和 SSM 最大的區別就是,這些配置 springboot 都幫我們做好了,我們纔可以如此高效的創建一個 springboot 項目。

根據pom文件中的starter依賴幫助完成了諸多的依賴控制,springboot 框架使用 starter 依賴主要幫我們做了兩點:

​ 1.引入相關的 jar

​ 2.自動完成 bean 配置。

當我們創建 springboot 項目時選擇 mybatis,mysql 組件,pom 文件幫我們加入了對應的 starter。這些 starter,正是它們幫我們引入了相關的 jar 包,雖然項目裏只有這幾個依賴,但可以看到 maven 已經幫我們下載了這麼多 jar 包,

​ 1,springboot 通過條件依賴註解解決了 bean 之間的衝突

​ 2,bean 需要的參數可以在 yml / properties文件裏配置

在 application.properties 文件中配置了數據庫連接地址,登錄名,密碼,以及 mybatis 的一些參數,但這些參數是怎麼被讀取的呢 ?

在 MybatisAutoConfiguration.class 文件中,有這麼一個註解@EnableConfigrationProperties,

MybatisProperties.class中的屬性,就是我們在 yml/properties 裏配置的一些參數,所以下次想知道 mybatis 可以配置什麼參數,我們就可以進這個文件裏看看有哪些屬性了

當然你肯定發現,我們在 yml/properties 配置參數時,編譯器會幫我們自動補全,這個主要是掃描一個 json 文件

3,bean 配置通過 spring.factories 文件加載

當我們啓動項目時,會掃描 jar 包 META-INF 文件夾下的 spring.factories 文件,就會去加載對應的配置文件

starter 幫我們做了這部分內容,我們就可以考慮,把一些通用的組件,製成一個屬於我們自己的 starter

1.首先我們要再重申一下 starter 的兩個重要作用

a. 引入相關的 jar;

b. 自動配置;

  1. starter 的命名規範

a. spring 提供的 starter:

spring-boot-starter-XXX-x.y.z.jar

spring-boot-XXX-autoconfigure-x.y.z.jar

b. 第三方提供的 jar

XXX-spring-boot-starter-x.y.z.jar

XXX-spring-boot-autoconfigure-x.y.z.jar

  1. 自己製作第三方 starter 的步驟

a.準備第三方的 jar

新建一個 maven 工程,寫好需要的功能,執行 maven install,打成 jar 包

b.製作 starter

​ (1)新建一個 springboot 工程,引入剛打成的 jar 包,爲了生成配置元信息,引入一個依賴

 <dependency>
    <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>  

(2)編寫自動配置類

(3)在 resource 下新建 META-INF 文件夾,在該文件夾下建 spring.properties 文件,確定spring要加載,啓用這個配置.

這樣,啓動項目時,就會加載編寫的配置類,生成需要的 bean。把這個項目打成 jar 包,我們的第一個 starter 就做好了,在自己項目中引入我們做好的 jar 包,就可以開始使用啦,是不是很簡單,springboot 使用 starter 簡化了我們的配置,還讓我們可以自己製作 starter,把自己常用的一些功能製成可以通用的 jar 包,實在爲我們的開發提供了很大的便利,我們不僅要會使用它,還要明白裏面的原理,這樣面對問題時,才能很快找到問題所在。

借鑑博客:https://www.cnblogs.com/fightingting/p/10630936.html

由此我們纔看到 SSM 和 Springboot 的最大區別,所以下次面試官再問你這兩者的區別,你可以這樣回答:

1.Springboot 將原有的 xml 配置,簡化爲 java 註解

2.使用 IDE 可以很方便的搭建一個 springboot 項目,選擇對應的 maven 依賴,簡化Spring應用的初始搭建以及開發過程

3.springboot 有內置的 tomcat 服務器,可以 jar 形式啓動一個服務,可以快速部署發佈 web 服務

4.springboot 使用 starter 依賴自動完成 bean 配置,,解決 bean 之間的衝突,並引入相關的 jar 包(這一點最重要)

springboot 中起着重要作用的是 starter,starter 主要有兩個作用:

1.引入相關的 jar 包

2.自動完成 bean 的配置

當我們創建 springboot 項目時選擇 mybatis,mysql 組件,可以看到 pom 文件幫我們加入了對應的 starter。

Spring Boot 的核心註解是哪個?它主要由哪幾個註解組成的?

  • 啓動類上面的註解是@SpringBootApplication,它也是 Spring Boot 的核心註解,
  • 主要組合包含了以下 3 個註解:
    • @SpringBootConfiguration:組合了 @Configuration 註解,實現配置文件的功能。
    • @EnableAutoConfiguration:打開自動配置的功能,也可以關閉某個自動配置的選項,
      • 如關閉數據源自動配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
    • @ComponentScan:Spring組件掃描。

Spring Boot 自動配置原理是什麼?

  • 註解 @EnableAutoConfiguration, @Configuration, @ConditionalOnClass 就是自動配置的核心,
    • 首先它得是一個配置文件,
    • 其次根據類路徑下是否有這個類去自動配置。

如何理解 Spring Boot 中的 Starters?

  • Starters可以理解爲啓動器,它包含了一系列可以集成到應用裏面的依賴包,
  • 你可以一站式集成 Spring 及其他技術,而不需要到處找示例代碼和依賴包。
  • 如你想使用 Spring JPA 訪問數據庫,只要加入 spring-boot-starter-data-jpa 啓動器依賴就能使用了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章