文章目录
前言
在 Spring Boot 中,starter
包和非 starter
包的区别主要在于使用方便性、配置简洁性和依赖管理的自动化。
一、区别
1. Starter 包
-
定义: Spring Boot 提供了一系列
starter
包,它们是预先配置的依赖集合,旨在简化项目的设置。例如,spring-boot-starter-web
是一个用于构建 Web 应用程序的常用starter
,包含了构建 RESTful 服务所需的所有依赖,如 Spring MVC、Jackson、Tomcat 等。 -
特性:
- 简化依赖管理:
starter
包将相关依赖打包成一个单一的依赖,开发者只需要在pom.xml
或build.gradle
中引用这个starter
,就可以自动拉取和配置一系列常用的库,而不需要手动逐一添加和配置。 - 自动化配置: 使用
starter
包,Spring Boot 会自动配置一些默认的设置。例如,spring-boot-starter-data-jpa
包含 Hibernate 和 Spring Data JPA,并且默认配置了 JPA 属性。
- 简化依赖管理:
-
示例:
<!-- 引入 Web 应用相关的 starter 包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2. 非 Starter 包
-
定义: 非
starter
包是标准的 Spring 库,通常只提供一个功能模块,而不会自动拉取相关的依赖。例如,spring-core
或spring-context
就是独立的 Spring 组件库,需要开发者根据需要手动添加依赖和配置。 -
特性:
- 灵活性更高: 使用非
starter
包,开发者可以完全控制依赖的版本和配置。对于特定项目需要精确控制依赖的场景,这种方式可能更合适。 - 手动配置更多: 由于缺乏自动化配置,开发者需要手动编写大量的配置代码。
- 灵活性更高: 使用非
-
示例:
<!-- 手动添加 Spring MVC 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency>
3. 主要区别
- 易用性:
starter
包简化了开发过程,自动管理和配置相关依赖,而非starter
包需要手动配置。 - 配置负担: 使用
starter
包,Spring Boot 提供了自动化配置(基于自动配置类),非starter
包则需要手动定义 Bean 和属性。 - 灵活性:
starter
包适合快速开发和原型设计,非starter
包适合需要精确控制和定制化的场景。
二、含starter包的默认的初始化配置机制
Spring Boot 的 starter
包不仅自动引入相关依赖包,还会进行一些默认的初始化配置。
1. 具体细节
-
自动引入依赖:
starter
包通过 Maven 或 Gradle 自动添加一系列常用的依赖。例如,spring-boot-starter-data-jpa
会引入 JPA、Hibernate、数据库连接池等所需的依赖。这极大地简化了项目配置,避免了开发者手动逐个添加依赖。 -
自动配置: 除了引入依赖,
starter
包还会触发 Spring Boot 的自动配置机制(Auto Configuration)。自动配置会根据项目中存在的类或配置来推断出合理的默认配置。例如:- 如果引入
spring-boot-starter-web
,Spring Boot 会自动配置嵌入式 Tomcat 服务器、Spring MVC 的相关组件等。 - 使用
spring-boot-starter-data-jpa
,Spring Boot 会自动配置 JPA 实体管理器,并提供数据源的默认配置(可以基于 application.properties 进行修改)。
- 如果引入
2. 示例
- Web Starter: 引入
spring-boot-starter-web
,自动配置 Tomcat 作为嵌入式服务器、Spring MVC、JSON 解析器等,开发者不需要手动设置这些组件。 - Data JPA Starter: 引入
spring-boot-starter-data-jpa
,自动配置 Hibernate、数据源、事务管理等,简化了数据持久化的配置过程。
三、含starter包的默认配置的配置信息存在哪里
Spring Boot 的默认配置主要来自于其 自动配置机制,通过 spring-boot-autoconfigure
模块提供。具体来说,自动配置会根据应用上下文和类路径中的依赖,提供适当的默认配置。
配置来源
@EnableAutoConfiguration
注解: Spring Boot 使用这个注解来自动配置 Spring 应用程序。它会扫描类路径,寻找所有可能的@Configuration
类,并有选择性地进行加载。META-INF/spring.factories
文件:spring-boot-autoconfigure
模块中定义了一个关键文件spring.factories
,这个文件列举了可以进行自动配置的所有类。例如,当你使用spring-boot-starter-web
,会加载 Web 相关的自动配置类,如WebMvcAutoConfiguration
和DispatcherServletAutoConfiguration
。- 默认属性: Spring Boot 提供的默认配置属性存储在
application.properties
或application.yml
中,但这些值可以被你自己的配置覆盖。默认值定义在SpringApplication
类及自动配置类中。例如,嵌入式 Tomcat 的默认端口是 8080,可以通过server.port
属性更改。
具体例子
- 数据库配置: 如果
spring-boot-starter-data-jpa
存在,Spring Boot 会自动配置DataSource
和 JPA 相关设置。如果没有自定义DataSource
,Spring Boot 会尝试使用 H2 内存数据库。 - Web 配置: 使用
spring-boot-starter-web
时,会自动配置嵌入式服务器(如 Tomcat)、Spring MVC 的视图解析器等。
你可以通过 spring-boot-actuator
模块中的 /actuator/configprops
端点查看应用程序加载的所有配置属性。
相关文档
如果需要深入查看 Spring Boot 的默认配置和自定义选项,可以参考 Spring Boot 官方文档。