亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot項(xiàng)目構(gòu)建時(shí)各種依賴(lài)詳細(xì)介紹與依賴(lài)關(guān)系說(shuō)明詳解

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

一、spring-boot-dependencies

1.簡(jiǎn)介

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

2. 內(nèi)容概覽

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

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

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

4. 依賴(lài)樹(shù)結(jié)構(gòu)

  spring-boot-dependencies本身并不引入任何依賴(lài),它只是聲明依賴(lài)版本。當(dāng)我們?cè)陧?xiàng)目中引入一個(gè)starter(比如spring-boot-starter-web)時(shí),Maven會(huì)根據(jù)spring-boot-dependencies中定義的版本去下載對(duì)應(yīng)的依賴(lài)。

6. spring-boot-dependencies中的屬性

  在spring-boot-dependencies的POM文件中,通過(guò)屬性定義了各個(gè)依賴(lài)的版本。例如:

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

  然后在依賴(lài)管理中引用這些屬性:

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

6. 如何查看完整的依賴(lài)樹(shù)?

在Maven項(xiàng)目中,可以使用以下命令查看依賴(lài)樹(shù):

mvn dependency:tree

在Gradle項(xiàng)目中,可以使用:

gradle dependencies

7. 依賴(lài)沖突解決

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

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

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

安全更新策略

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

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

漏洞掃描:定期檢查依賴(lài)漏洞

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

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

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

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

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

9. 總結(jié)

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

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

二、spring-boot-starter-parent

1.簡(jiǎn)介

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

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

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

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

項(xiàng)目POM -> 繼承 spring-boot-starter-parent -> 繼承 spring-boot-dependencies

項(xiàng)目POM -> spring-boot-starter-parent -> spring-boot-dependencies

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

具體內(nèi)容:

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

3.主要內(nèi)容

由于spring-boot-starter-parent本身是一個(gè)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

該P(yáng)OM的主要部分如下

  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> <!-- 資源過(guò)濾占位符分隔符 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 編碼 -->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 其他屬性 -->
</properties>
  1. 構(gòu)建配置(build)
  • 資源過(guò)濾配置:對(duì)src/main/resources和src/test/resources目錄進(jìn)行過(guò)濾,使用上面的占位符分隔符。
  • 插件管理:配置了多個(gè)插件的默認(rèn)行為。
  1. 插件配置
  • maven-compiler-plugin:設(shè)置源代碼和目標(biāo)的Java版本。
  • maven-failsafe-plugin:配置測(cè)試運(yùn)行。
  • spring-boot-maven-plugin:用于打包可執(zhí)行jar。
  1. 資源過(guò)濾(resources):

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

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

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

項(xiàng)目POM:

<project>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.0</version>
</parent>
... 項(xiàng)目自己的定義 ...
</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等的基本配置。

另外,資源過(guò)濾配置如下:

<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering> <!-- 啟用過(guò)濾 -->
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>
<!-- 其他資源目錄,不啟用過(guò)濾 -->
<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中,資源過(guò)濾默認(rèn)只針對(duì)application*.properties, application*.yml, application*.yaml文件。

4.總結(jié):

spring-boot-starter-parent提供了:

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

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

示例:一個(gè)典型的Spring Boot項(xiàng)目的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>

在這個(gè)項(xiàng)目中,我們不需要指定依賴(lài)的版本,因?yàn)楦窹OM已經(jīng)管理了。同時(shí),構(gòu)建時(shí)使用的Java版本、編碼、資源過(guò)濾等都已經(jīng)配置好。

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

三、spring-boot-starter-web

1.簡(jiǎn)介

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

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

3.使用

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

1. Servlet 容器配置

java
@AutoConfiguration
@ConditionalOnWebApplication
@EnableConfigurationProperties(ServerProperties.class)
public class ServletWebServerFactoryAutoConfiguration {
    // 自動(dòng)配置內(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
  • 錯(cuò)誤頁(yè)面:/error 自動(dòng)映射
  • JSON 支持:自動(dòng)配置 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 請(qǐng)求 請(qǐng)求分發(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ù)開(kāi)發(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ù)自動(dòng)驗(yàn)證
    }
}

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 # 異步超時(shí)時(shí)間
  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é)

性能特性

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

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

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

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

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

相關(guān)文章

  • MyBatis中criteria的or(或查詢)語(yǔ)法說(shuō)明

    MyBatis中criteria的or(或查詢)語(yǔ)法說(shuō)明

    這篇文章主要介紹了MyBatis中criteria的or(或查詢)語(yǔ)法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot中的starter使用解析

    springboot中的starter使用解析

    這篇文章主要介紹了springboot中的starter使用解析,引入了starter依賴(lài)之后,基礎(chǔ)組件就可以像在spring的bean一樣在項(xiàng)目中使用,那其實(shí)只要找到在哪里加載了這些bean就明白了,需要的朋友可以參考下
    2023-10-10
  • MyBatis字段名和屬性名不一致的解決方法

    MyBatis字段名和屬性名不一致的解決方法

    本文主要介紹了MyBatis字段名和屬性名不一致的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 如何使用idea里面自帶的翻譯插件

    如何使用idea里面自帶的翻譯插件

    這篇文章主要介紹了idea里面自帶的翻譯插件,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java中url漢字編碼互相轉(zhuǎn)換實(shí)例

    java中url漢字編碼互相轉(zhuǎn)換實(shí)例

    這篇文章介紹了java中url漢字編碼互相轉(zhuǎn)換實(shí)例,有需要的朋友可以參考一下
    2013-10-10
  • Java中Stringbuilder和正則表達(dá)式示例詳解

    Java中Stringbuilder和正則表達(dá)式示例詳解

    Java語(yǔ)言為字符串連接運(yùn)算符(+)提供特殊支持,并為其他對(duì)象轉(zhuǎn)換為字符串,字符串連接是通過(guò)StringBuilder(或StringBuffer)類(lèi)及其append方法實(shí)現(xiàn)的,這篇文章主要給大家介紹了關(guān)于Java中Stringbuilder和正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • IDEA中配置Tomcat全過(guò)程

    IDEA中配置Tomcat全過(guò)程

    文章介紹了在IDEA中配置Tomcat的六步流程,包括添加服務(wù)器、配置部署選項(xiàng)、設(shè)置應(yīng)用服務(wù)器及啟動(dòng),并提及Maven依賴(lài)可能因約定大于配置導(dǎo)致問(wèn)題,需檢查依賴(lài)版本或配置文件以確保生效
    2025-08-08
  • 一文深入理解Java中的深拷貝機(jī)制

    一文深入理解Java中的深拷貝機(jī)制

    在Java編程中,我們經(jīng)常需要處理對(duì)象的復(fù)制問(wèn)題,深拷貝和淺拷貝是兩種常見(jiàn)的復(fù)制方式,它們?cè)趦?nèi)存管理和對(duì)象引用方面存在不同特點(diǎn),本文將帶大家深入探究Java中的深拷貝機(jī)制,需要的朋友可以參考下
    2023-09-09
  • Java8 中的ParallelStream

    Java8 中的ParallelStream

    這篇文章主要介紹了Java8 中的并行流 ParallelStreams,Java8并行流ParallelStream和Stream的區(qū)別就是支持并行執(zhí)行,提高程序運(yùn)行效率。下面就來(lái)看看文章內(nèi)容具體介紹吧
    2021-10-10
  • Gradle的基本使用

    Gradle的基本使用

    這篇文章主要介紹了Gradle的基本使用方法,幫助大家更好的理解和學(xué)習(xí)Gradle的相關(guān)知識(shí),感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論