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

Rumah Java Javabermula spring boot原理是什么

spring boot原理是什么

Jun 16, 2020 pm 02:14 PM
spring boot

spring boot原理是什么

spring boot原理是什么:

一、內容簡介

通過《Spring Boot 體驗》介紹了Spring Boot 可以干什么,這篇文章主要來解析它各個功能點的基本實現思路,從而對Spring Boot有個整體的理性認知。

  • 依賴管理:Spring Boot做了大量的starter,而starter只是幫我們導入依賴項的一個入口,簡化項目依賴管理

  • 自動配置:Spring Boot基于Spring代碼配置提供了很多常用組件和框架的配置類,從而簡化項目配置

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

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

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

  • 應用監(jiān)控:為應用審計、健康監(jiān)控、度量數據收集提供基本服務

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

二、起步依賴:starter

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

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

    </dependencies>
    .......

原理:我們只是導入了一個依賴項,但是該依賴項借助Maven的依賴傳遞幫我們導入了大量web開發(fā)要使用的包,如果解壓該依賴對應的文件,我們發(fā)現該jar文件中其實是沒有什么實質性內容的,因為它只是一個pom項目,實質性內容在該包對應的文件中,該文件由mavne在下載jar文件時下載,在該文件中聲明了很多依賴項,如:spring-webmvc、spring-web等。

簡而言之,我們的項目如果依賴了某個starter,那么該starter又會依賴很多其他依賴項,而Maven的依賴傳遞會把starter依賴的依賴項添加到我們的項目中。starter只是做為了一個我們項目依賴項的導入中介。

有關maven的依賴傳遞可以參閱相關資料,簡單描述如下:

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

二、自動配置:AutoConfiguration

Spring Boot會按照某些條件使用默認值自動配置相關的組件或框架,從而大幅減少項目的配置文件,它在Spring自動掃描和基于代碼配置的基礎上加入了自己的處理流程。以下內容先簡單介紹Spring基于代碼配置,然后介紹Spring Boot做了什么。

(一)、Spring基于代碼配置

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

Spring 配置文件

<!-- 數據源 -->
 <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è)務代碼

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");

總結:

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

使用 XML配置文件有利有弊,其中一個弊端是無法過多的定制bean的實例化過程,比如以上的dataSource,如果想要在類路徑下有oracle的jdbc驅動時才去實例化,這是無法完成的。還有一個弊端是代碼邏輯分散,因為有一部分的邏輯是在XML中配置的;當然好處就是配置集中化,而且方便配置切換。

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

Spring 配置類

@Configuration // 表明當前類提供Spring配置文件的作用,Spring上下文會從當前類的注解中提取配置信息
@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è)務代碼

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);

總結:

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

(二)、Spring Boot的自動配置

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

//DBCP 數據源配置.
@Configuration //這個注解在實際代碼中沒有加,當前類被其它配置類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);
   }

}

總結:

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

spring.factories文件中自動配置類的部分內容

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

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

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

三、集成內嵌容器 :main方法

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

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

不使用內嵌容器的Web應用在打包時需要對工程進行一定的修改。

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

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

五、熱啟動 :devtools

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

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

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

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

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

七、問題:

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

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

推薦教程: 《java教程

Atas ialah kandungan terperinci spring boot原理是什么. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Cara menggunakan Spring Boot untuk membina aplikasi pemprosesan data besar Cara menggunakan Spring Boot untuk membina aplikasi pemprosesan data besar Jun 23, 2023 am 09:07 AM

Dengan kemunculan era data besar, semakin banyak syarikat mula memahami dan mengiktiraf nilai data besar dan menerapkannya dalam perniagaan. Masalah yang datang dengannya ialah bagaimana mengendalikan aliran data yang besar ini. Dalam kes ini, aplikasi pemprosesan data besar telah menjadi sesuatu yang mesti dipertimbangkan oleh setiap perusahaan. Bagi pembangun, cara menggunakan SpringBoot untuk membina aplikasi pemprosesan data besar yang cekap juga merupakan isu yang sangat penting. SpringBoot ialah rangka kerja Java yang sangat popular yang membolehkan

Bina aplikasi desktop menggunakan Spring Boot dan JavaFX Bina aplikasi desktop menggunakan Spring Boot dan JavaFX Jun 22, 2023 am 10:55 AM

Memandangkan teknologi terus berkembang, kami kini boleh menggunakan teknologi yang berbeza untuk membina aplikasi desktop. SpringBoot dan JavaFX ialah salah satu pilihan yang lebih popular sekarang. Artikel ini akan menumpukan pada cara menggunakan kedua-dua rangka kerja ini untuk membina aplikasi desktop yang kaya dengan ciri. 1. Pengenalan kepada SpringBoot dan JavaFXSpringBoot ialah rangka kerja pembangunan pesat berdasarkan rangka kerja Spring. Ia membantu pembangun membina aplikasi web dengan cepat sambil menyediakan satu set

Menggunakan WebSocket dalam Spring Boot untuk melaksanakan fungsi tolak dan pemberitahuan Menggunakan WebSocket dalam Spring Boot untuk melaksanakan fungsi tolak dan pemberitahuan Jun 23, 2023 am 11:47 AM

Dalam pembangunan aplikasi web moden, WebSocket ialah teknologi biasa untuk komunikasi segera dan pemindahan data masa nyata. Rangka kerja SpringBoot menyediakan sokongan untuk WebSocket bersepadu, menjadikannya sangat mudah untuk pembangun melaksanakan fungsi tolak dan pemberitahuan. Artikel ini akan memperkenalkan cara menggunakan WebSocket untuk melaksanakan fungsi tolak dan pemberitahuan dalam SpringBoot, dan menunjukkan pelaksanaan ruang sembang dalam talian masa nyata yang ringkas. Cipta projek SpringBoot Mula-mula, kita perlu mencipta a

Spring Boot+MyBatis+Atomikos+MySQL (dengan kod sumber) Spring Boot+MyBatis+Atomikos+MySQL (dengan kod sumber) Aug 15, 2023 pm 04:12 PM

Dalam projek sebenar, kami cuba mengelakkan transaksi yang diedarkan. Walau bagaimanapun, kadangkala ia benar-benar perlu untuk melakukan beberapa pemisahan perkhidmatan, yang akan membawa kepada masalah transaksi yang diedarkan. Pada masa yang sama, transaksi yang diedarkan juga ditanya di pasaran semasa temu bual Anda boleh berlatih dengan kes ini, dan anda boleh bercakap tentang 123 dalam temu bual.

Cara menggunakan Spring Boot untuk membina aplikasi blockchain dan kontrak pintar Cara menggunakan Spring Boot untuk membina aplikasi blockchain dan kontrak pintar Jun 22, 2023 am 09:33 AM

Dengan peningkatan mata wang digital seperti Bitcoin, teknologi blockchain secara beransur-ansur menjadi topik hangat. Kontrak pintar boleh dianggap sebagai bahagian penting dalam teknologi blockchain. SpringBoot, sebagai rangka kerja pembangunan back-end Java yang popular, juga boleh digunakan untuk membina aplikasi blockchain dan kontrak pintar. Artikel ini akan memperkenalkan cara menggunakan SpringBoot untuk membina aplikasi dan kontrak pintar berdasarkan teknologi blockchain. 1. SpringBoot dan blockchain Pertama, kita perlu memahami beberapa konsep asas yang berkaitan dengan blockchain. Rantaian sekat

Bina sistem ESB menggunakan Spring Boot dan Apache ServiceMix Bina sistem ESB menggunakan Spring Boot dan Apache ServiceMix Jun 22, 2023 pm 12:30 PM

Memandangkan perniagaan moden semakin bergantung pada pelbagai aplikasi dan sistem yang berbeza, integrasi perusahaan menjadi lebih penting. Bas Perkhidmatan Perusahaan (ESB) ialah model seni bina integrasi yang menghubungkan sistem dan aplikasi yang berbeza bersama-sama untuk menyediakan pertukaran data biasa dan perkhidmatan penghalaan mesej untuk mencapai penyepaduan aplikasi peringkat perusahaan. Menggunakan SpringBoot dan ApacheServiceMix, kami boleh membina sistem ESB dengan mudah Artikel ini akan memperkenalkan cara melaksanakannya. SpringBoot dan A

Penjadualan tugas Spring Boot dan kaedah pelaksanaan tugas berjadual Penjadualan tugas Spring Boot dan kaedah pelaksanaan tugas berjadual Jun 22, 2023 pm 11:58 PM

SpringBoot ialah rangka kerja pembangunan Java yang sangat popular Ia bukan sahaja mempunyai kelebihan pembangunan pesat, tetapi juga mempunyai banyak fungsi praktikal terbina dalam. Antaranya, penjadualan tugas dan tugas berjadual adalah salah satu fungsi yang biasa digunakan. Artikel ini akan meneroka kaedah penjadualan tugas dan pemasaan tugas SpringBoot. 1. Pengenalan kepada penjadualan tugas SpringBoot Penjadualan tugas SpringBoot (TaskScheduling) merujuk kepada melaksanakan beberapa tugas khas pada masa tertentu atau dalam keadaan tertentu.

Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot Mencapai sokongan berbilang bahasa dan aplikasi antarabangsa melalui Spring Boot Jun 23, 2023 am 09:09 AM

Dengan perkembangan globalisasi, semakin banyak laman web dan aplikasi perlu menyediakan sokongan berbilang bahasa dan fungsi pengantarabangsaan. Bagi pembangun, melaksanakan fungsi ini bukanlah tugas yang mudah kerana ia memerlukan pertimbangan dari banyak aspek, seperti terjemahan bahasa, tarikh, masa dan format mata wang, dsb. Walau bagaimanapun, menggunakan rangka kerja SpringBoot, kami boleh melaksanakan sokongan berbilang bahasa dan aplikasi antarabangsa dengan mudah. Mula-mula, marilah kita memahami antara muka LocaleResolver yang disediakan oleh SpringBoot. Loc

See all articles