最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot項目構(gòu)建時各種依賴詳細(xì)介紹與依賴關(guān)系說明詳解

 更新時間:2025年08月15日 11:53:06   作者:yyangjun  
SpringBoot通過spring-boot-dependencies統(tǒng)一依賴版本管理,spring-boot-starter-web簡化Web開發(fā)流程,自動配置核心功能,提升開發(fā)效率與兼容性,下面通過本文介紹Springboot項目構(gòu)建時各種依賴詳細(xì)介紹與依賴關(guān)系說明,感興趣的朋友一起看看吧

一、spring-boot-dependencies

1.簡介

  spring-boot-dependencies 是一個特殊的POM(Project Object Model)文件,它由Spring Boot團(tuán)隊維護(hù),其主要作用是為Spring Boot相關(guān)的依賴提供統(tǒng)一的版本管理。它定義了大量的依賴及其兼容版本,確保Spring Boot生態(tài)中的庫能夠協(xié)同工作。官方倉庫地址:
https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/3.1.0/spring-boot-dependencies-3.1.0.pom(版本可依據(jù)具體項目要求更改)

2. 內(nèi)容概覽

spring-boot-dependencies中,主要包含以下內(nèi)容:

  • 依賴管理(Dependency Management):定義了Spring Boot項目常用的第三方庫的版本號(如Spring Framework、Jackson、Log4j2、Hibernate等)。
  • 插件管理(Plugin Management):定義了一些Maven插件的版本(如maven-compiler-plugin, maven-surefire-plugin等)。
  • 屬性(Properties):在<properties>標(biāo)簽下定義了大量依賴的版本號,然后通過屬性引用來統(tǒng)一版本。

3.核心內(nèi)容結(jié)構(gòu)

4. 依賴樹結(jié)構(gòu)

  spring-boot-dependencies本身并不引入任何依賴,它只是聲明依賴版本。當(dāng)我們在項目中引入一個starter(比如spring-boot-starter-web)時,Maven會根據(jù)spring-boot-dependencies中定義的版本去下載對應(yīng)的依賴。

6. spring-boot-dependencies中的屬性

  在spring-boot-dependencies的POM文件中,通過屬性定義了各個依賴的版本。例如:

<properties>
<activemq.version>5.16.5</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.88</appengine-sdk.version>
<artemis.version>2.19.1</artemis.version>
<aspectj.version>1.9.7</aspectj.version>
<assertj.version>3.19.0</assertj.version>
<atomikos.version>4.0.6</atomikos.version>
<awaitility.version>4.1.0</awaitility.version>
... 更多屬性
</properties>

  然后在依賴管理中引用這些屬性:

<dependencyManagement>
<dependencies>
...
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-amqp</artifactId>
<version>${activemq.version}</version>
</dependency>
...
</dependencies>
</dependencyManagement>

6. 如何查看完整的依賴樹?

在Maven項目中,可以使用以下命令查看依賴樹:

mvn dependency:tree

在Gradle項目中,可以使用:

gradle dependencies

7. 依賴沖突解決

  由于spring-boot-dependencies已經(jīng)管理了版本,通常不會出現(xiàn)版本沖突。但如果需要覆蓋某個依賴的版本,可以在項目的pom.xml中顯式聲明該依賴并指定版本(會覆蓋spring-boot-dependencies中的版本)。例如:

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
</dependencies>

8.企業(yè)級實踐建議

安全更新策略

版本鎖定:在父 POM 中固定 Spring Boot 版本

<properties>
    <spring-boot.version>3.1.0</spring-boot.version>
</properties>

漏洞掃描:定期檢查依賴漏洞

mvn org.owasp:dependency-check-maven:check

增量更新:使用版本范圍謹(jǐn)慎升級

<spring-boot.version>[3.0.0,3.2.0)</spring-boot.version>

通過 spring-boot-dependencies,Spring Boot 團(tuán)隊為開發(fā)者提供了:

  • 經(jīng)過嚴(yán)格測試的依賴兼容矩陣
  • 一站式的版本管理入口
  • 零配置的依賴沖突解決方案
  • 靈活的版本覆蓋機(jī)制

9. 總結(jié)

  • spring-boot-dependencies是Spring Boot的版本管理POM,它統(tǒng)一管理了大量第三方依賴的版本。
  • 通過starter,我們可以輕松引入一組功能相關(guān)的依賴,并且這些依賴的版本都是經(jīng)過測試兼容的。
  • 依賴樹結(jié)構(gòu)清晰,可以通過Maven或Gradle命令查看。
  • 在需要時,可以覆蓋默認(rèn)的依賴版本。

通過這種方式,Spring Boot極大地簡化了依賴管理,讓開發(fā)者可以專注于業(yè)務(wù)邏輯。

二、spring-boot-starter-parent

1.簡介

  首先,spring-boot-starter-parent是一個父POM,它繼承自spring-boot-dependencies,并且添加了默認(rèn)的構(gòu)建配置。

  下面詳細(xì)說明其內(nèi)容以及依賴樹結(jié)構(gòu)(注意:依賴樹結(jié)構(gòu)通常是指項目依賴的傳遞性依賴,但這里我們更關(guān)注的是父POM的繼承結(jié)構(gòu)和它帶來的構(gòu)建配置)。

2 .結(jié)構(gòu)圖

結(jié)構(gòu)圖:

項目POM -> 繼承 spring-boot-starter-parent -> 繼承 spring-boot-dependencies

項目POM -> spring-boot-starter-parent -> spring-boot-dependencies

構(gòu)建配置的繼承關(guān)系(非依賴樹,而是POM繼承關(guān)系)可以用下圖表示:

具體內(nèi)容:

  • 繼承spring-boot-dependencies:因此獲得了所有依賴版本管理。
  • 默認(rèn)配置:包括資源過濾、插件配置(如maven-compiler-plugin, maven-jar-plugin, maven-war-plugin, maven-surefire-plugin等)、資源文件處理(application.properties和application.yml的過濾)、默認(rèn)的Java版本和編碼等。

3.主要內(nèi)容

由于spring-boot-starter-parent本身是一個POM,我們可以查看其內(nèi)容(以3.1.0版本為例):

官方地址:https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-starter-parent/3.1.0/spring-boot-starter-parent-3.1.0.pom

該POM的主要部分如下

  1. 繼承spring-boot-dependencies
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.1.0</version>
</parent>
  1. 定義屬性(覆蓋或新增)
<properties>
<java.version>17</java.version> <!-- 默認(rèn)Java版本 -->
<resource.delimiter>@</resource.delimiter> <!-- 資源過濾占位符分隔符 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 編碼 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 其他屬性 -->
</properties>
  1. 構(gòu)建配置(build)
  • 資源過濾配置:對src/main/resources和src/test/resources目錄進(jìn)行過濾,使用上面的占位符分隔符。
  • 插件管理:配置了多個插件的默認(rèn)行為。
  1. 插件配置
  • maven-compiler-plugin:設(shè)置源代碼和目標(biāo)的Java版本。
  • maven-failsafe-plugin:配置測試運行。
  • spring-boot-maven-plugin:用于打包可執(zhí)行jar。
  1. 資源過濾(resources):

默認(rèn)配置了資源過濾,使得在資源文件中可以使用占位符(如@variable@)進(jìn)行替換。

注意:spring-boot-starter-parent本身不包含任何代碼,也不直接添加任何依賴(除了構(gòu)建插件),它的主要作用是提供構(gòu)建配置和依賴版本管理。

當(dāng)我們創(chuàng)建一個項目并繼承spring-boot-starter-parent時,項目的POM結(jié)構(gòu)如下:

項目POM:

<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
</parent>
... 項目自己的定義 ...
</project>

具體構(gòu)建配置的內(nèi)容:

在spring-boot-starter-parent中,配置了以下插件:

  • maven-compiler-plugin:設(shè)置源代碼和目標(biāo)版本為${java.version}。
  • maven-failsafe-plugin:默認(rèn)使用JUnit,并配置了必要的參數(shù)。
  • spring-boot-maven-plugin:用于打包可執(zhí)行的jar或war。
  • 其他插件:如maven-jar-plugin, maven-war-plugin等的基本配置。

另外,資源過濾配置如下:

<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering> <!-- 啟用過濾 -->
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<!-- 其他資源目錄,不啟用過濾 -->
<resource>
<directory>${basedir}/src/main/resources</directory>
<excludes>
<exclude>**/application*.yml</exclude>
<exclude>**/application*.yaml</exclude>
<exclude>**/application*.properties</exclude>
</excludes>
</resource>
</resources>

注意:在spring-boot-starter-parent中,資源過濾默認(rèn)只針對application*.properties, application*.yml, application*.yaml文件。

4.總結(jié):

spring-boot-starter-parent提供了:

  • 依賴管理(通過繼承spring-boot-dependencies)。
  • 默認(rèn)的構(gòu)建配置(包括插件配置和資源過濾)。
  • 默認(rèn)的屬性配置(如Java版本、編碼等)。

這使得開發(fā)者無需關(guān)心構(gòu)建細(xì)節(jié),只需關(guān)注業(yè)務(wù)代碼。

示例:一個典型的Spring Boot項目的POM:

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
</parent>
<groupId>com.example</groupId>
<artifactId>myproject</artifactId>
<version>1.0.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>

在這個項目中,我們不需要指定依賴的版本,因為父POM已經(jīng)管理了。同時,構(gòu)建時使用的Java版本、編碼、資源過濾等都已經(jīng)配置好。

注意:如果項目需要自定義父POM,則不能直接繼承spring-boot-starter-parent,這時可以采用之前介紹的方式,通過dependencyManagement導(dǎo)入spring-boot-dependencies,并手動配置插件和資源過濾。

三、spring-boot-starter-web

1.簡介

  spring-boot-starter-web是 Spring Boot 的核心 Starter 之一,用于快速構(gòu)建 Web 應(yīng)用程序。它提供了完整的 Spring MVC 框架支持和內(nèi)嵌 Servlet 容器,讓開發(fā)者能立即創(chuàng)建 RESTful 服務(wù)或傳統(tǒng) Web 應(yīng)用。

2.結(jié)構(gòu)圖

3.使用

自動配置行為
當(dāng)檢測到 spring-boot-starter-web 在類路徑中時,自動觸發(fā)以下配置:

1. Servlet 容器配置

java
@AutoConfiguration
@ConditionalOnWebApplication
@EnableConfigurationProperties(ServerProperties.class)
public class ServletWebServerFactoryAutoConfiguration {
    // 自動配置內(nèi)嵌Tomcat
    @Bean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        return new TomcatServletWebServerFactory();
    }
}

2. Spring MVC 配置

@Configuration
@ConditionalOnClass(DispatcherServlet.class)
@AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class)
public class WebMvcAutoConfiguration {
    // 配置視圖解析器
    @Bean
    @ConditionalOnMissingBean
    public InternalResourceViewResolver defaultViewResolver() {
        // ...
    }
    // 配置消息轉(zhuǎn)換器
    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        // ...
    }
}

3. 默認(rèn)行為

  • 端口:8080
  • 上下文路徑:/
  • 靜態(tài)資源目錄:
    /static
    /public
    /resources
    /META-INF/resources
  • 錯誤頁面:/error 自動映射
  • JSON 支持:自動配置 Jackson

替換tomcat:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

3.http處理流程

客戶端 Tomcat 容器 DispatcherServlet @RestController HTTP 請求 請求分發(fā) 映射到處理方法 返回結(jié)果 響應(yīng)處理 HTTP 響應(yīng) 客戶端 Tomcat 容器 DispatcherServlet @RestController

4.應(yīng)用示例

1. 基本配置

server:
  port: 8081
  servlet:
    context-path: /api
  tomcat:
    max-threads: 200

2. 靜態(tài)資源配置

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/custom/**")
                .addResourceLocations("classpath:/custom-static/");
    }
}

3. 攔截器配置

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor())
                .addPathPatterns("/api/**");
    }
}

4.RESTful服務(wù)開發(fā)

@RestController
@RequestMapping("/api/users")
public class UserController {
    @GetMapping
    public ResponseEntity<List<User>> getUsers() {
        // 返回200 OK + JSON列表
    }
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public User createUser(@Valid @RequestBody User user) {
        // 參數(shù)自動驗證
    }
}

5.全局異常處理

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFound(
        UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND)
                .body(new ErrorResponse(ex.getMessage()));
    }
}

6. 性能優(yōu)化配置

spring:
  mvc:
    async:
      request-timeout: 5000 # 異步超時時間
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 20MB
server:
  compression:
    enabled: true
    mime-types: text/html,text/css,application/json

與其他 Starter 的協(xié)作

@SpringBootApplication
@EnableJpaRepositories // 啟用JPA
@EnableWebSecurity // 啟用安全
public class FullStackApp {
    public static void main(String[] args) {
        SpringApplication.run(FullStackApp.class, args);
    }
}

7.總結(jié)

性能特性

場景默認(rèn)配置優(yōu)化建議
線程池Tomcat 200線程根據(jù)CPU核心數(shù)調(diào)整
連接超時無限制設(shè)置server.tomcat.connection-timeout
響應(yīng)壓縮關(guān)閉開啟server.compression.enabled=true
靜態(tài)資源緩存關(guān)閉添加Cache-Control頭
JSON序列化全字段序列化使用@JsonView控制字段

通過 spring-boot-starter-web,開發(fā)者能夠:

  • 在 30 秒內(nèi)創(chuàng)建可運行的 Web 應(yīng)用
  • 獲得生產(chǎn)就緒的 HTTP 服務(wù)能力
  • 自動處理 90% 的 Web 開發(fā)通用配置
  • 靈活擴(kuò)展 MVC 功能
  • 無縫整合 Spring 生態(tài)系統(tǒng)組件

此 Starter 將傳統(tǒng) Spring MVC 應(yīng)用的配置工作量減少 80%,同時保持完整的靈活性,是構(gòu)建現(xiàn)代 Java Web 應(yīng)用的基石。

到此這篇關(guān)于Springboot項目構(gòu)建時各種依賴詳細(xì)介紹與依賴關(guān)系說明的文章就介紹到這了,更多相關(guān)Springboot依賴內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中循環(huán)依賴的常見陷阱與解決方案

    SpringBoot中循環(huán)依賴的常見陷阱與解決方案

    循環(huán)依賴指兩個或多個Bean相互依賴對方,形成一個閉環(huán),本文將深入探討循環(huán)依賴的根源,分析Spring的解決策略,并提供多種實戰(zhàn)解決方案,希望對大家有所幫助
    2025-05-05
  • springsession全能序列化實踐方案

    springsession全能序列化實踐方案

    文章主要介紹了SpringSession的“全能序列化”方案,即使用JSON格式替代Java原生序列化來存儲會話數(shù)據(jù),JSON序列化方案能提高系統(tǒng)性能、增強跨語言服務(wù)調(diào)用能力、提升類版本兼容性,并具有更高的安全性,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • Java使用NIO包實現(xiàn)Socket通信的實例代碼

    Java使用NIO包實現(xiàn)Socket通信的實例代碼

    本篇文章主要介紹了Java使用NIO包實現(xiàn)Socket通信的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Feign+mybatisplus搭建項目遇到的坑及解決

    Feign+mybatisplus搭建項目遇到的坑及解決

    這篇文章主要介紹了Feign+mybatisplus搭建項目遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • rabbitmq消息隊列原理分析

    rabbitmq消息隊列原理分析

    這篇文章主要介紹了rabbitmq消息隊列原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-12-12
  • 配置springboot項目使用外部tomcat過程解析

    配置springboot項目使用外部tomcat過程解析

    這篇文章主要介紹了配置springboot項目使用外部tomcat過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 使用res:bean屬性復(fù)制避免null值覆蓋版本

    使用res:bean屬性復(fù)制避免null值覆蓋版本

    這篇文章主要介紹了使用res:bean屬性復(fù)制避免null值覆蓋版本的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 詳解Lombok安裝及Spring Boot集成Lombok

    詳解Lombok安裝及Spring Boot集成Lombok

    這篇文章主要介紹了詳解Lombok安裝及Spring Boot集成Lombok,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 詳解spring cloud feign踩坑記錄

    詳解spring cloud feign踩坑記錄

    這篇文章主要介紹了spring cloud feign踩坑記錄,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringMVC攔截器快速掌握上篇

    SpringMVC攔截器快速掌握上篇

    攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2022-08-08

最新評論

普安县| 瓦房店市| 永年县| 岑溪市| 长治市| 方山县| 通化市| 抚州市| 鹿邑县| 天长市| 呼和浩特市| 大理市| 略阳县| 宣恩县| 乡城县| 平邑县| 宁德市| 宁陕县| 青川县| 翼城县| 随州市| 寻甸| 新乡县| 太原市| 牟定县| 曲阜市| 万荣县| 宁乡县| 青海省| 盐城市| 阳西县| 陕西省| 赤峰市| 甘南县| 鸡东县| 利川市| 惠来县| 仪陇县| 麻江县| 德保县| 嘉鱼县|