1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      springboot的運(yùn)行原理-創(chuàng)新互聯(lián)

      這篇文章將為大家詳細(xì)講解有關(guān)spring boot的運(yùn)行原理,文章內(nèi)容質(zhì)量較高,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

      創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比杏花嶺網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式杏花嶺網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋杏花嶺地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

      spring boot原理是什么:

      一、內(nèi)容簡(jiǎn)介

      通過《Spring Boot 體驗(yàn)》介紹了Spring Boot 可以干什么,這篇文章主要來解析它各個(gè)功能點(diǎn)的基本實(shí)現(xiàn)思路,從而對(duì)Spring Boot有個(gè)整體的理性認(rèn)知。

      • 依賴管理:Spring Boot做了大量的starter,而starter只是幫我們導(dǎo)入依賴項(xiàng)的一個(gè)入口,簡(jiǎn)化項(xiàng)目依賴管理

      • 自動(dòng)配置:Spring Boot基于Spring代碼配置提供了很多常用組件和框架的配置類,從而簡(jiǎn)化項(xiàng)目配置

      • 內(nèi)嵌容器:集成Java的常見Web容器,簡(jiǎn)化開發(fā)環(huán)境搭建,而且是打包插件打包web應(yīng)用為可執(zhí)行文件的基礎(chǔ)

      • Maven插件:用于打包可直接運(yùn)行的jar文件或war文件,為項(xiàng)目的開箱即用提供支持,當(dāng)然還有輔助開發(fā)的一些小功能

      • 熱啟動(dòng):減少開發(fā)過程中反復(fù)啟動(dòng)容器的次數(shù),提高開發(fā)效率

      • 應(yīng)用監(jiān)控:為應(yīng)用審計(jì)、健康監(jiān)控、度量數(shù)據(jù)收集提供基本服務(wù)

      • CLI(命令行工具):進(jìn)行快速原型搭建,沒有必要使用

      二、起步依賴:starter

      在常規(guī)的Maven工程中,如果要使用某個(gè)框架或者組件,需要導(dǎo)入大量的依賴,而且得注意依賴的版本匹配等問題,在Spring Boot中提供了大量的starter,這樣的starter會(huì)借助Maven的依賴傳遞幫我們導(dǎo)入相關(guān)的依賴。比如以下的pom文件,它會(huì)添加web相關(guān)的依賴項(xiàng),包括Spring Web、Spring MVC等:

          .......    
              
              
                  org.springframework.boot
                  spring-boot-starter-web
                  2.1.1.RELEASE
              
      
          
          .......

      原理:我們只是導(dǎo)入了一個(gè)依賴項(xiàng),但是該依賴項(xiàng)借助Maven的依賴傳遞幫我們導(dǎo)入了大量web開發(fā)要使用的包,如果解壓該依賴對(duì)應(yīng)的文件,我們發(fā)現(xiàn)該jar文件中其實(shí)是沒有什么實(shí)質(zhì)性內(nèi)容的,因?yàn)樗皇且粋€(gè)pom項(xiàng)目,實(shí)質(zhì)性內(nèi)容在該包對(duì)應(yīng)的文件中,該文件由mavne在下載jar文件時(shí)下載,在該文件中聲明了很多依賴項(xiàng),如:spring-webmvc、spring-web等。

      簡(jiǎn)而言之,我們的項(xiàng)目如果依賴了某個(gè)starter,那么該starter又會(huì)依賴很多其他依賴項(xiàng),而Maven的依賴傳遞會(huì)把starter依賴的依賴項(xiàng)添加到我們的項(xiàng)目中。starter只是做為了一個(gè)我們項(xiàng)目依賴項(xiàng)的導(dǎo)入中介。

      有關(guān)maven的依賴傳遞可以參閱相關(guān)資料,簡(jiǎn)單描述如下:

      項(xiàng)目A依賴于B,B又依賴于C。項(xiàng)目A只需要聲明依賴于B,不需要聲明依賴于C, Maven自動(dòng)管理這種依賴的傳遞。

      二、自動(dòng)配置:AutoConfiguration

      Spring Boot會(huì)按照某些條件使用默認(rèn)值自動(dòng)配置相關(guān)的組件或框架,從而大幅減少項(xiàng)目的配置文件,它在Spring自動(dòng)掃描和基于代碼配置的基礎(chǔ)上加入了自己的處理流程。以下內(nèi)容先簡(jiǎn)單介紹Spring基于代碼配置,然后介紹Spring Boot做了什么。

      (一)、Spring基于代碼配置

      在Spring3以前,使用Spring上下文的方式一般是如下的:

      Spring 配置文件

      
       
       
       
       
       
       
       

      業(yè)務(wù)代碼

      package com.demo.spring.sample.step03.service.impl;.......@Service("userService")
      public class UserService implements IUserService {   
         @Autowired
         private IUserDAO userDAO = null;
      }

      創(chuàng)建Spring上下文

      ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

      總結(jié):

      通過component-scan告訴Spring去掃描類路徑下加入了@Component、 @Repository、@Service、 @Controlle注解的類,Spring 實(shí)例化這些類,并且把實(shí)例注冊(cè)到Spring上下文中,但是數(shù)據(jù)源、屬性文件等第三方的bean還是采用XML文件來配置,如果要完全消除XML配置文件,還是不太可行的,如果一定要做,相對(duì)比較麻煩。

      使用 XML配置文件有利有弊,其中一個(gè)弊端是無法過多的定制bean的實(shí)例化過程,比如以上的dataSource,如果想要在類路徑下有oracle的jdbc驅(qū)動(dòng)時(shí)才去實(shí)例化,這是無法完成的。還有一個(gè)弊端是代碼邏輯分散,因?yàn)橛幸徊糠值倪壿嬍窃赬ML中配置的;當(dāng)然好處就是配置集中化,而且方便配置切換。

      在Spring3以后,可以通過如下的方式使用Spring容器:

      Spring 配置類

      @Configuration // 表明當(dāng)前類提供Spring配置文件的作用,Spring上下文會(huì)從當(dāng)前類的注解中提取配置信息
      @ComponentScan(basePackages = "com.demo.spring.sample.step08") 
      // 開啟組件掃描
      public class AppConfig {
          @Bean // 表示這個(gè)方法實(shí)例化一個(gè)bean,id=dataSource
          public DataSource dataSource() {
              DriverManagerDataSource dataSource = new DriverManagerDataSource();
              dataSource.setDriverClassName(driverClassName);
              dataSource.setUrl(url);
              dataSource.setUsername(userName);
              dataSource.setPassword(password);
              return dataSource;
          }}

      業(yè)務(wù)代碼

      package com.demo.spring.sample.step03.service.impl;.......@Service("userService")
      public class UserService implements IUserService {   
         @Autowired
         private IUserDAO userDAO = null;
      }

      創(chuàng)建Spring上下文

      ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

      總結(jié):

      創(chuàng)建Spring上下文時(shí)不再使用基于XML的配置,配置文件消失,由AppConfig這個(gè)類來代替,這個(gè)類需要加@Configuration注解,而且該類中可以有加@Bean注解的方法,容器會(huì)自動(dòng)調(diào)用這樣的方法來實(shí)例化Bean。

      (二)、Spring Boot的自動(dòng)配置

      Spring Boot幫寫了大量的加入了@Configuration注解的類,每個(gè)類提供一種組件或框架的配置,比如DataSourceConfiguration.java中的靜態(tài)內(nèi)部類Dbcp2,它提供DBCP數(shù)據(jù)源的配置

      //DBCP 數(shù)據(jù)源配置.
      @Configuration //這個(gè)注解在實(shí)際代碼中沒有加,當(dāng)前類被其它配置類Import
      @ConditionalOnClass(org.apache.commons.dbcp2.BasicDataSource.class)
      @ConditionalOnMissingBean(DataSource.class)
      @ConditionalOnProperty(name = "spring.datasource.type",  matchIfMissing = true,havingValue = "org.apache.commons.dbcp2.BasicDataSource")
      static class Dbcp2 {
      
         @Bean
         @ConfigurationProperties(prefix = "spring.datasource.dbcp2")
         public org.apache.commons.dbcp2.BasicDataSource dataSource(
               DataSourceProperties properties) {
            return createDataSource(properties,
                  org.apache.commons.dbcp2.BasicDataSource.class);
         }
      
      }

      總結(jié):

      當(dāng)Spring Boot啟動(dòng)的基本步驟走完后,  如果啟用了自動(dòng)配置,Spring Boot會(huì)加載下的<\META-INF\spring.factories>文件中的內(nèi)容,該文件中定義了有關(guān)自動(dòng)配置的信息,其中EnableAutoConfiguration對(duì)應(yīng)的每一個(gè)類中都加入了注解@Configuration,也就是說這樣的每一個(gè)類都相當(dāng)于Spring的一個(gè)或多個(gè)配置文件,而其中加注解@Bean的方法是bean的工廠方法,會(huì)由Spring上下文自動(dòng)調(diào)用,并且將返回的對(duì)象注冊(cè)到上下文中。

      spring.factories文件中自動(dòng)配置類的部分內(nèi)容

      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      ......
      org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
      ......

      (三)、如何覆蓋自動(dòng)配置的屬性

      Spring Boot的自動(dòng)配置會(huì)采用大量的默認(rèn)值(約定由于配置),可以通過在類路徑下提供application.properties或者application.yml配置文件來覆蓋默認(rèn)值,當(dāng)然部分屬性值必須通過該配置文件來提供,比如如果要使用Spring Boot對(duì)數(shù)據(jù)源的自動(dòng)配置,則在配置文件中必須提供jdbc的url,否則會(huì)拋出異常。

      三、集成內(nèi)嵌容器 :main方法

      Spring Boot支持的內(nèi)嵌容器Tomcat、Jetty、Undertow本身就支持在Java中內(nèi)嵌使用,因?yàn)檫@些容器本身就是使用Java編寫的,只不過Spring Boot在main方法的調(diào)用鏈中根據(jù)自動(dòng)配置嵌入了這樣的容器。

      不使用這樣的內(nèi)嵌容器也是可以的,在Maven中移除這樣的依賴就可以,當(dāng)然這個(gè)時(shí)候如果要通過Spring Boot使用Web相關(guān)框架,則需要打包為war包后獨(dú)立部署,或者在開發(fā)過程中使用IDE環(huán)境的開發(fā)部署功能。

      不使用內(nèi)嵌容器的Web應(yīng)用在打包時(shí)需要對(duì)工程進(jìn)行一定的修改。

      四、打包可運(yùn)行文件 :maven-plugin

      Maven使用的默認(rèn)打包工具支持打包jar文件或者war文件,但是打包后的jar文件中不能再嵌入jar文件,而打包后的war文件不能直接運(yùn)行,為了把工程所有文件打包為一個(gè)可直接運(yùn)行的jar文件或war文件,spring提供了一個(gè)maven插件來解決這樣的問題。當(dāng)然這個(gè)插件還提諸如spring-boot:run這樣的開發(fā)功能

      五、熱啟動(dòng) :devtools

      在開發(fā)過程中,當(dāng)完成一個(gè)功能單元后,我們會(huì)啟動(dòng)程序查看運(yùn)行效果,如果代碼需要再次修改,則修改后需要關(guān)掉程序,然后重啟程序,這個(gè)過程不斷迭代,從而完成代碼的編寫、調(diào)試。

      Spring Boot 熱啟動(dòng)通過重寫容器的類加載器,完成程序的部分重啟,從而簡(jiǎn)化、加速程序的調(diào)試過程。spring-boot-devtools通過兩個(gè)類加載器分別加載依賴庫和項(xiàng)目代碼,當(dāng)spring-boot-devtools發(fā)現(xiàn)項(xiàng)目的編譯輸出路徑下有變化時(shí),通過其中的一個(gè)類加載器重新加載所有的項(xiàng)目自有代碼,從而完成熱啟動(dòng)。這樣的熱啟動(dòng)比冷啟動(dòng)(關(guān)閉、重啟)要快很多,到底快多少取決于項(xiàng)目自有代碼的數(shù)量。

      和熱啟動(dòng)對(duì)應(yīng)的還有一個(gè)熱替換,是指單獨(dú)地替換被修改的某一個(gè)class到j(luò)vm中,甚至可以單獨(dú)替換class的某個(gè)方法,這種方式比熱啟動(dòng)要快,通常使用 JavaAgent 攔截默認(rèn)加載器的行為來實(shí)現(xiàn),spring有個(gè)獨(dú)立的項(xiàng)目Spring Loaded就是這么做的,但是項(xiàng)目已經(jīng)被移到了 attic 了,也就是被Spring束之高閣,所以不建議使用。

      六、應(yīng)用監(jiān)控:actuator

      如果類路徑中有actuator這個(gè)組件的話,Spring Boot的自動(dòng)配置會(huì)自動(dòng)創(chuàng)建一些端點(diǎn)(端點(diǎn):遵循Restful設(shè)計(jì)風(fēng)格的資源,對(duì)應(yīng)于Controller的某一個(gè)處理請(qǐng)求的方法),這些端點(diǎn)接受請(qǐng)求后返回有關(guān)應(yīng)用的相關(guān)信息,比如:健康信息、線程信息等。返回的是json格式的數(shù)據(jù),而使用 Spring Boot Admin 可以實(shí)現(xiàn)這些 JSON 數(shù)據(jù)的視圖展現(xiàn),當(dāng)然也可以為其他應(yīng)用監(jiān)控系統(tǒng)監(jiān)控當(dāng)前系統(tǒng)提供服務(wù)。

      七、問題:

      為什么pom文件中要繼承spring-boot-starter-parent?

      spring-boot-starter-parent是spring-boot提供的一個(gè)pom,在該pom中定義了很多屬性,比如:java源文件的字符編碼,編譯級(jí)別等,還有依賴管理、資源定義的相關(guān)pom配置,項(xiàng)目的pom如果繼承starter-parent,可以減少相關(guān)配置

      看完上述內(nèi)容,你們對(duì)spring boot的運(yùn)行原理有進(jìn)一步的了解嗎?如果還想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。


      文章題目:springboot的運(yùn)行原理-創(chuàng)新互聯(lián)
      標(biāo)題網(wǎng)址:http://www.ef60e0e.cn/article/coejjs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        洮南市| 客服| 班玛县| 大同县| 吕梁市| 积石山| 宿州市| 许昌县| 文成县| 沭阳县| 丹凤县| 榆林市| 双峰县| 舟山市| 巨鹿县| 裕民县| 陆丰市| 恭城| 姜堰市| 青浦区| 中阳县| 英德市| 洛隆县| 福海县| 荥经县| 小金县| 沙洋县| 靖安县| 平湖市| 工布江达县| 图木舒克市| 济宁市| 遂平县| 西宁市| 招远市| 元阳县| 延长县| 昔阳县| 崇礼县| 牟定县| 连江县|