国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java入門 spring boot原理是什麼

spring boot原理是什麼

Jun 16, 2020 pm 02:14 PM
spring boot

spring boot原理是什麼

spring boot原理是什麼:

#一、內(nèi)容簡介

透過《Spring Boot 體驗》介紹了Spring Boot可以幹什麼,這篇文章主要來解析它各個功能點的基本實現(xiàn)思路,從而對Spring Boot有個整體的理性認(rèn)知。

  • 依賴管理:Spring Boot做了大量的starter,而starter只是幫我們導(dǎo)入依賴項的一個入口,簡化專案依賴管理

  • 自動配置:Spring Boot基於Spring程式碼配置提供了許多常用元件和框架的組態(tài)類,從而簡化專案組態(tài)

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

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

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

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

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

二、起始依賴:starter

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

    .......    <dependencies>
        <!--Web應(yīng)用程序的典型依賴項-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

    </dependencies>
    .......

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

簡而言之,我們的專案如果依賴了某個starter,那麼該starter又會依賴很多其他依賴項,而Maven的依賴傳遞會把starter依賴的依賴項加入我們的專案中。 starter只是做為了一個我們專案依賴項的導(dǎo)入中介。

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

專案A依賴B,B又依賴C。專案A只需要聲明依賴B,不需要聲明依賴C, Maven自動管理這種依賴的傳遞。

二、自動配置:AutoConfiguration

Spring Boot會按照某些條件使用預(yù)設(shè)值自動配置相關(guān)的元件或框架,從而大幅減少專案的配置文件,它在Spring自動掃描和基於程式碼配置的基礎(chǔ)上加入了自己的處理流程。以下內(nèi)容先簡單介紹Spring基於程式碼配置,然後介紹Spring Boot做了什麼。

(一)、Spring基於程式碼設(shè)定

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

Spring 設(shè)定檔

<!-- 數(shù)據(jù)源 -->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
 <property name="username" value="hr" />
 <property name="password" value="hr" /></bean>
 <!--組件掃描-->
 <context:component-scan base-package="com.demo.spring.sample.step03.?rvic?" />

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

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

建立Spring上下文

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

總結(jié):

#透過component-scan告訴Spring去掃描類別路徑下加入了@Component、 @Repository、@Service、 @ Controlle註解的類,Spring 實例化這些類,並且把實例註冊到Spring上下文中,但是資料來源、屬性檔案等第三方的bean還是採用XML檔案來配置,如果要完全消除XML配置文件,還是不太可行的,如果一定要做,相對比較麻煩。

使用XML設(shè)定檔有利有弊,其中一個弊端是無法過多的客製化bean的實例化過程,例如以上的dataSource,如果想要在類別路徑下有oracle的jdbc驅(qū)動時才去實例化,這是無法完成的。還有一個弊端是程式碼邏輯分散,因為有一部分的邏輯是在XML中配置的;當(dāng)然好處就是配置集中化,而且方便配置切換。

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

Spring 設(shè)定類別

@Configuration // 表明當(dāng)前類提供Spring配置文件的作用,Spring上下文會從當(dāng)前類的注解中提取配置信息
@ComponentScan(basePackages = "com.demo.spring.sample.step08") 
// 開啟組件掃描
public class AppConfig {
    @Bean // 表示這個方法實例化一個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;
}

建立Spring上下文

ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

總結(jié):

建立Spring上下文時不再使用基於XML的配置,設(shè)定檔消失,由AppConfig這個類別來代替,這個類別需要加@Configuration註解,而且該類別中可以有加@Bean註解的方法,容器會自動呼叫這樣的方法來實例化Bean。

(二)、Spring Boot的自動配置

Spring Boot幫寫了大量的加入了@Configuration註解的類,每個類提供一種組件或框架的配置,例如DataSourceConfiguration .java中的靜態(tài)內(nèi)部類別Dbcp2,它提供DBCP資料來源的配置

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

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

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

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

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

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

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

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

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

四、打包可運行文件 :maven-plugin

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

五、熱啟動 :devtools

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

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

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

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

如果類路徑中有actuator這個組件的話,Spring Boot的自動配置會自動創(chuàng)建一些端點(端點:遵循Restful設(shè)計風(fēng)格的資源,對應(yīng)于Controller的某一個處理請求的方法),這些端點接受請求后返回有關(guān)應(yīng)用的相關(guān)信息,比如:健康信息、線程信息等。返回的是json格式的數(shù)據(jù),而使用 Spring Boot Admin 可以實現(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提供的一個pom,在該pom中定義了很多屬性,比如:java源文件的字符編碼,編譯級別等,還有依賴管理、資源定義的相關(guān)pom配置,項目的pom如果繼承starter-parent,可以減少相關(guān)配置

推薦教程: 《java教程

以上是spring boot原理是什麼的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用Spring Boot建立大數(shù)據(jù)處理應(yīng)用 如何使用Spring Boot建立大數(shù)據(jù)處理應(yīng)用 Jun 23, 2023 am 09:07 AM

隨著大數(shù)據(jù)時代的到來,越來越多的企業(yè)開始了解並認(rèn)識到大數(shù)據(jù)的價值,並將其運用到商業(yè)中。而隨之而來的問題就是如何處理這些大流量的數(shù)據(jù)。在這種情況下,大數(shù)據(jù)處理應(yīng)用程式成為了每個企業(yè)必須考慮的事情。而對於開發(fā)人員而言,如何使用SpringBoot建立一個高效的大數(shù)據(jù)處理應(yīng)用程式也是一個非常重要的問題。 SpringBoot是一個非常流行的Java框架,它可以讓

使用Spring Boot和JavaFX建立桌面應(yīng)用程式 使用Spring Boot和JavaFX建立桌面應(yīng)用程式 Jun 22, 2023 am 10:55 AM

隨著技術(shù)的不斷發(fā)展,我們現(xiàn)在可以使用不同的技術(shù)來建立桌面應(yīng)用程式。而SpringBoot和JavaFX則是現(xiàn)在較為流行的選擇之一。本文將重點放在如何使用這兩個框架來建立一個功能豐富的桌面應(yīng)用程式。一、介紹SpringBoot和JavaFXSpringBoot是基於Spring框架的快速開發(fā)框架。它可以幫助開發(fā)者快速建立Web應(yīng)用程序,同時提供一組開

如何利用Spring Boot建立區(qū)塊鏈應(yīng)用和智慧合約 如何利用Spring Boot建立區(qū)塊鏈應(yīng)用和智慧合約 Jun 22, 2023 am 09:33 AM

隨著比特幣等數(shù)位貨幣的興起,區(qū)塊鏈技術(shù)也逐漸成為熱門話題。而智能合約,則可視為區(qū)塊鏈技術(shù)的重要組成部分。 SpringBoot作為一種流行的Java後端開發(fā)框架,也能夠用來建立區(qū)塊鏈應(yīng)用和智慧合約。本文將介紹如何利用SpringBoot來建構(gòu)基於區(qū)塊鏈技術(shù)的應(yīng)用與智慧合約。一、SpringBoot與區(qū)塊鏈?zhǔn)紫?,我們需要了解一些與區(qū)塊鏈相關(guān)的基本概念。區(qū)塊鏈

Spring Boot+MyBatis+Atomikos+MySQL(附源碼) Spring Boot+MyBatis+Atomikos+MySQL(附源碼) Aug 15, 2023 pm 04:12 PM

我們在實際專案中,盡量規(guī)避分散式事務(wù)。但是,有些時候是真的需要做一些服務(wù)拆分從而會引出分散式事務(wù)問題。同時,分散式事務(wù)也是面試中市場被問到,可以拿著這個案例練練手,面試就可以說上個123了。

使用Spring Boot和Apache ServiceMix建置ESB系統(tǒng) 使用Spring Boot和Apache ServiceMix建置ESB系統(tǒng) Jun 22, 2023 pm 12:30 PM

隨著現(xiàn)代企業(yè)越來越依賴各種不同的應(yīng)用程式和系統(tǒng),企業(yè)整合變得愈發(fā)重要。企業(yè)服務(wù)匯流排(ESB)就是一種整合架構(gòu)模式,透過將不同系統(tǒng)和應(yīng)用程式連接在一起,提供通用的資料交換和訊息路由服務(wù),從而實現(xiàn)企業(yè)級應(yīng)用程式整合。使用SpringBoot和ApacheServiceMix,我們可以輕鬆建立一個ESB系統(tǒng),這篇文章將介紹如何實作。 SpringBoot和A

Spring Boot的任務(wù)排程與定時任務(wù)實作方法 Spring Boot的任務(wù)排程與定時任務(wù)實作方法 Jun 22, 2023 pm 11:58 PM

SpringBoot是一款非常受歡迎的Java開發(fā)框架,不僅具有快速開發(fā)的優(yōu)勢,而且還內(nèi)建了許多實用的功能,其中,任務(wù)調(diào)度和定時任務(wù)就是其常用的功能之一。本文將探討SpringBoot的任務(wù)調(diào)度和定時任務(wù)實現(xiàn)方法。一、SpringBoot任務(wù)調(diào)度簡介SpringBoot任務(wù)調(diào)度(TaskScheduling)是指在特定的時間點或某個條件下,執(zhí)行一些特

Spring Boot中使用WebSocket實現(xiàn)推播與通知功能 Spring Boot中使用WebSocket實現(xiàn)推播與通知功能 Jun 23, 2023 am 11:47 AM

在現(xiàn)代Web應(yīng)用程式開發(fā)中,WebSocket是實現(xiàn)即時通訊和即時資料傳輸?shù)某S眉夹g(shù)。 SpringBoot框架提供了整合WebSocket的支持,讓開發(fā)者可以非常方便地實現(xiàn)推播和通知功能。本文將介紹SpringBoot中如何使用WebSocket實現(xiàn)推播和通知功能,並示範(fàn)一個簡單的即時線上聊天室的實作。創(chuàng)建SpringBoot專案首先,我們需要創(chuàng)建一個

透過Spring Boot實現(xiàn)多語言支援和國際化應(yīng)用 透過Spring Boot實現(xiàn)多語言支援和國際化應(yīng)用 Jun 23, 2023 am 09:09 AM

隨著全球化的發(fā)展,越來越多的網(wǎng)站和應(yīng)用需要提供多語言支援和國際化功能。對於開發(fā)人員而言,實現(xiàn)這些功能並不是一件容易的事情,因為它需要考慮許多方面的問題,例如語言的翻譯、日期、時間和貨幣格式等等。但是,使用SpringBoot框架,我們可以輕鬆實現(xiàn)多語言支援和國際化應(yīng)用。首先,讓我們來了解一下SpringBoot提供的LocaleResolver介面。 Loc

See all articles