<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot 有哪些優(yōu)點,它和 Spring 有什么區(qū)別

          共 5252字,需瀏覽 11分鐘

           ·

          2021-08-02 12:03

          Spring 和 Spring Boot 有什么區(qū)別

          Spring 為 Java 程序提供了全面的基礎(chǔ)架構(gòu)支持,包含了很多非常實用的功能,如 Spring JDBC、Spring AOP、Spring ORM、Spring Test 等,這些模塊的出現(xiàn),大大的縮短了應(yīng)用程序的開發(fā)時間,同時提高了應(yīng)用開發(fā)的效率。

          Spring Boot 本質(zhì)上是 Spring 框架的延伸和擴展,它的誕生是為了簡化 Spring 框架初始搭建以及開發(fā)的過程,使用它可以不再依賴 Spring 應(yīng)用程序中的 XML 配置,為更快、更高效的開發(fā) Spring 提供更加有力的支持

          Spring Boot 的優(yōu)點有哪些

          1、更快速的構(gòu)建能力

          Spring Boot 提供了更多的 Starters 用于快速構(gòu)建業(yè)務(wù)框架,Starters 可以理解為啟動器,它包含了一系列可以集成到應(yīng)用里面的依賴包,你可以一站式集成 Spring 及其他技術(shù),而不需要到處找依賴包。

          當(dāng)我們添加了 Starter 模塊支持之后,在項目的構(gòu)建期,它就會把所有其他依賴項將自動添加到項目中。

          2、起步依賴

          Spring Boot 提供了起步依賴,也就是在創(chuàng)建 Spring Boot 時可以直接勾選依賴模塊,這樣在項目初始化時就會把相關(guān)依賴直接添加到項目中,大大縮短了查詢并添加依賴的時間,如下圖所示


          3、內(nèi)嵌容器支持

          Spring Boot 內(nèi)嵌了 Tomcat、Jetty、Undertow 三種容器,其默認(rèn)嵌入的容器是 Tomcat,這個在我們啟動 Spring Boot 項目的時候,在控制臺上就能看到.

          我們可以通過修改 pom.xml 來移除內(nèi)嵌的 Tomcat 更換為其他的容器,比如更換為 Jetty 容器,配置如下:

          <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-web</artifactId>

          <!-- 移處 Tomcat -->

          <exclusions>

          <exclusion>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-tomcat</artifactId>

          </exclusion>

          </exclusions>

          </dependency>

          <!-- 移處 jetty 容器 -->

          <dependency>

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-jetty</artifactId>

          </dependency>

          4、Actuator 監(jiān)控

          Spring Boot 自帶了 Actuator 監(jiān)控功能,主要用于提供對應(yīng)用程序監(jiān)控,以及控制的能力,比如監(jiān)控應(yīng)用程序的運行狀況,或者內(nèi)存、線程池、Http 請求統(tǒng)計等,同時還提供了關(guān)閉應(yīng)用程序等功能。

          Actuator 提供了 19 個接口,接口請求地址和代表含義如下表所示:



          Spring Boot 啟動源碼分析

          Spring Boot 程序的入口是 SpringApplication.run(Application.class, args) 方法,它的源碼如下:

          public ConfigurableApplicationContext run(String... args) {

          // 1.創(chuàng)建并啟動計時監(jiān)控類

          StopWatch stopWatch = new StopWatch();

          stopWatch.start();

          // 2.聲明應(yīng)用上下文對象和異常報告集合

          ConfigurableApplicationContext context = null;

          Collection<SpringBootExceptionReporter> exceptionReporters = new ArrayList();

          // 3.設(shè)置系統(tǒng)屬性 headless 的值

          this.configureHeadlessProperty();

          // 4.創(chuàng)建所有 Spring 運行監(jiān)聽器并發(fā)布應(yīng)用啟動事件

          SpringApplicationRunListeners listeners = this.getRunListeners(args);

          listeners.starting();

          Collection exceptionReporters;

          try {

          // 5.處理 args 參數(shù)

          ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);

          // 6.準(zhǔn)備環(huán)境

          ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments);

          this.configureIgnoreBeanInfo(environment);

          // 7.創(chuàng)建 Banner 的打印類

          Banner printedBanner = this.printBanner(environment);

          // 8.創(chuàng)建應(yīng)用上下文

          context = this.createApplicationContext();

          // 9.實例化異常報告器

          exceptionReporters = this.getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[]{ConfigurableApplicationContext.class}, context);

          // 10.準(zhǔn)備應(yīng)用上下文

          this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);

          // 11.刷新應(yīng)用上下文

          this.refreshContext(context);

          // 12.應(yīng)用上下文刷新之后的事件的處理

          this.afterRefresh(context, applicationArguments);

          // 13.停止計時監(jiān)控類

          stopWatch.stop();

          // 14.輸出日志記錄執(zhí)行主類名、時間信息

          if (this.logStartupInfo) {

          (new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch);

          }

          // 15.發(fā)布應(yīng)用上下文啟動完成事件

          listeners.started(context);

          // 16.執(zhí)行所有 Runner 運行器

          this.callRunners(context, applicationArguments);

          } catch (Throwable var10) {

          this.handleRunFailure(context, var10, exceptionReporters, listeners);

          throw new IllegalStateException(var10);

          }

          try {

          // 17.發(fā)布應(yīng)用上下文就緒事件

          listeners.running(context);

          // 18.返回應(yīng)用上下文對象

          return context;

          } catch (Throwable var9) {

          this.handleRunFailure(context, var9, exceptionReporters, (SpringApplicationRunListeners)null);

          throw new IllegalStateException(var9);

          }

          }

          Spring Boot 的啟動流程

          1、創(chuàng)建并啟動計時監(jiān)控類

          此計時器是為了監(jiān)控并記錄 Spring Boot 應(yīng)用啟動的時間的,它會記錄當(dāng)前任務(wù)的名稱,然后開啟計時器。

          2、聲明應(yīng)用上下文對象和異常報告集合

          此過程聲明了應(yīng)用上下文對象和一個異常報告的 ArrayList 集合。

          3、設(shè)置系統(tǒng)屬性 headless 的值

          設(shè)置 Java.awt.headless = true,其中 awt(Abstract Window Toolkit)的含義是抽象窗口工具集。設(shè)置為 true 表示運行一個 headless 服務(wù)器,可以用它來作一些簡單的圖像處理。

          4、創(chuàng)建所有 Spring 運行監(jiān)聽器并發(fā)布應(yīng)用啟動事件

          此過程用于獲取配置的監(jiān)聽器名稱并實例化所有的類。

          5、初始化默認(rèn)應(yīng)用的參數(shù)類

          也就是說聲明并創(chuàng)建一個應(yīng)用參數(shù)對象。

          6、準(zhǔn)備環(huán)境

          創(chuàng)建配置并且綁定環(huán)境(通過 property sources 和 profiles 等配置文件)。

          7、創(chuàng)建 Banner 的打印類

          Spring Boot 啟動時會打印 Banner 圖片,如下圖所示:


          此 banner 信息是在 SpringBootBanner 類中定義的,我們可以通過實現(xiàn) Banner 接口來自定義 banner 信息,然后通過代碼 setBanner() 方法設(shè)置 Spring Boot 項目使用自己自定義 Banner 信息,或者是在 resources 下添加一個 banner.txt,把 banner 信息添加到此文件中,就可以實現(xiàn)自定義 banner 的功能了。

          8、創(chuàng)建應(yīng)用上下文

          根據(jù)不同的應(yīng)用類型來創(chuàng)建不同的 ApplicationContext 上下文對象。

          9、實例化異常報告器

          它調(diào)用的是
          getSpringFactoriesInstances() 方法來獲取配置異常類的名稱,并實例化所有的異常處理類。

          10、準(zhǔn)備應(yīng)用上下文

          此方法的主要作用是把上面已經(jīng)創(chuàng)建好的對象,傳遞給 prepareContext 來準(zhǔn)備上下文,例如將環(huán)境變量 environment 對象綁定到上下文中、配置 bean 生成器以及資源加載器、記錄啟動日志等操作。

          11、刷新應(yīng)用上下文

          此方法用于解析配置文件,加載 bean 對象,并且啟動內(nèi)置的 web 容器等操作。

          12、應(yīng)用上下文刷新之后的事件處理

          這個方法的源碼是空的,可以做一些自定義的后置處理操作。

          13、停止計時監(jiān)控類

          停止此過程第一步中的程序計時器,并統(tǒng)計任務(wù)的執(zhí)行信息。

          14、輸出日志信息

          把相關(guān)的記錄信息,如類名、時間等信息進(jìn)行控制臺輸出。

          15、發(fā)布應(yīng)用上下文啟動完成事件

          觸發(fā)所有
          SpringApplicationRunListener 監(jiān)聽器的 started 事件方法。

          16、執(zhí)行所有 Runner 運行器

          執(zhí)行所有的 ApplicationRunner 和 CommandLineRunner 運行器。

          17、發(fā)布應(yīng)用上下文就緒事件

          觸發(fā)所有的
          SpringApplicationRunListener 監(jiān)聽器的 running 事件。

          18、返回應(yīng)用上下文對象


          瀏覽 93
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          CRM和SCRM有什么區(qū)別?
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  制服丝袜第十页 | 一本大道久久无码精品一区二区三区 | 欧美性爱久久 | 这里只有精品在线观看 | 亚洲在线观看高清无码 |