SpringBoot官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html
Servlet Stack
基于ServletAPI构建,采用同步阻塞I/O模型,并使用了单线程请求模型。没接收到一个请求Tomcat就会创建一个线程。

ReactiveStack(响应式堆栈)
Spring WebFlux是一个从零开始构建的非阻塞Web框架,旨在利用多核、下一代处理器并处理大量并发连接。

快速入门体验
场景:浏览器发送/hello请求,返回"Hello,Spring Boot 3!"
第1步:创建一个新的空项目

第2步:创建项目的模块

第3步:导入依赖项
所有springboot项目继承springboot的父项目spring-boot-starter-parent

我们需要开发一个web功能,所以需要添加一个web依赖,所有和web有关的依赖都有了

第4步:写代码,主程序入口程序
1.创建一个类文件,写上Main入口方法
2.固定代码写法,启动springboot
java
SpringApplication.run(MainApplication.class,args );//固定写法
3.类上添加注解@SpringBootApplication
,让程序知道这是一个springboot应用程序

第5步:写控制器Controller
注意:springboot只扫描主程序文件夹所在的包和子包。

第6步:启动项目,访问请求地址


打包插件:
java
<!-- springBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
点击右手侧边栏中的Maver,然后选中clean和package,在点击运行按钮。
或者是执行命令:mvn clean package


只要别的电脑安装了javaJDK对应版本执行jar包命令就能运行应用。
运行jar包:
java
java -jar xxxxxx.jar
//如果需要指定服务运行端口号:
java -jar xxxxxx.jar --server.port=8081
springBoot提供外部配置,在jar包同级目录下创建一个文件application.properties ,在这里面配置需要修改的配置项,在重新运行jar包,配置项就能生效。

小结:
导入相关的场景,拥有相关的功能。
官方提供的场景命名:spring-boot-starter-xxxx
第三方命名的场景启动器:xxxxx-spring-boot-starter
例如:thirdpartyproject-spring-boot-starter
以下申请启动者由Spring Boot团队提供:org.springframework.boot
| 名称 | 描述 |
|---|---|
spring-boot-starter |
核心启动功能,包括自动配置支持、日志记录和 YAML |
spring-boot-starter-activemq |
使用 Apache ActiveMQ 和 JMS 的入门程序 |
spring-boot-starter-activemq-test |
用于使用 Apache ActiveMQ 和 JMS 进行测试的入门程序 |
spring-boot-starter-actuator-test |
Spring Boot 的 Actuator 测试入门,提供生产准备功能,帮助你监控和管理应用 |
spring-boot-starter-amqp |
使用 Spring AMQP 和 Rabbit MQ 的入门程序 |
spring-boot-starter-amqp-test |
测试春季AMQP和Rabbit MQ的起始器 |
spring-boot-starter-artemis |
使用 Apache Artemis 和 JMS 的入门工具 |
spring-boot-starter-artemis-test |
用于测试Apache Artemis和JMS |
spring-boot-starter-aspectj |
用于在 AspectJ 中使用面向切面编程的起始程序 |
spring-boot-starter-aspectj-test |
用于用 AspectJ 测试面向切面编程的起始程序 |
spring-boot-starter-batch |
使用春季批次的起始剂 |
spring-boot-starter-batch-data-mongodb |
使用 Spring Batch 与 Data MongoDB 的入门程序 |
spring-boot-starter-batch-data-mongodb-test |
用于使用 Spring Batch 和 Data MongoDB 进行测试的入门程序 |
spring-boot-starter-batch-jdbc |
用JDBC使用批次的起始器 |
spring-boot-starter-batch-jdbc-test |
使用JDBC批次测试的起始器 |
spring-boot-starter-batch-test |
用于春季批次测试的起始剂 |
spring-boot-starter-cache |
使用 Spring 缓存支持的起始程序 |
spring-boot-starter-cache-test |
测试 Spring 缓存支持的起始程序 |
spring-boot-starter-cassandra |
使用 Cassandra 分布式数据库的入门 |
spring-boot-starter-cassandra-test |
用于测试Cassandra分布式数据库的Starter |
spring-boot-starter-classic |
核心经典启动器,包括完全自动配置支持、日志记录和 YAML |
spring-boot-starter-cloudfoundry |
使用 Cloud Foundry 的入门工具 |
spring-boot-starter-cloudfoundry-test |
用于测试Cloud Foundry的入门 |
spring-boot-starter-couchbase |
使用 Couchbase 文档导向数据库的 Starter |
spring-boot-starter-couchbase-test |
Starter for testing Couchbase 文档导向数据库 |
spring-boot-starter-data-cassandra |
用于使用 Cassandra 分布式数据库和 Spring Data Cassandra 的入门程序 |
spring-boot-starter-data-cassandra-reactive |
用于使用 Cassandra 分布式数据库和 Spring Data Cassandra Reactive 的入门工具 |
spring-boot-starter-data-cassandra-reactive-test |
用于测试Cassandra分布式数据库和Spring Data Cassandra Reactive 的起始器 |
spring-boot-starter-data-cassandra-test |
用于测试Cassandra分布式数据库和Spring Data Cassandra |
spring-boot-starter-data-couchbase |
用于使用 Couchbase 文档导向数据库和 Spring Data Couchbase 的 Starter |
spring-boot-starter-data-couchbase-reactive |
用于使用 Couchbase 文档导向数据库和 Spring Data Couchbase Reactive 的 Starter |
spring-boot-starter-data-couchbase-reactive-test |
用于测试 Couchbase 文档导向数据库和 Spring Data Couchbase Reactive 的 Starter |
spring-boot-starter-data-couchbase-test |
用于测试 Couchbase 文档导向数据库和 Spring Data Couchbase 的 Starter |
spring-boot-starter-data-elasticsearch |
用于使用 Elasticsearch 搜索和分析引擎以及 Spring Data Elasticsearch 的入门工具 |
spring-boot-starter-data-elasticsearch-test |
用于测试Elasticsearch搜索和分析引擎以及Spring Data Elasticsearch的起始程序 |
spring-boot-starter-data-jdbc |
使用 Spring Data JDBC 的入门 |
spring-boot-starter-data-jdbc-test |
测试 Spring Data JDBC 的启动器 |
spring-boot-starter-data-jpa |
使用 Spring Data JPA 搭配 Hibernate 的起始程序 |
spring-boot-starter-data-jpa-test |
用Hibernate测试Spring Data JPA的起始程序 |
spring-boot-starter-data-ldap |
使用 Spring Data LDAP 的起始码 |
spring-boot-starter-data-ldap-test |
测试 Spring Data LDAP 的起始器 |
spring-boot-starter-data-mongodb |
用于使用 MongoDB 文档导向数据库和 Spring Data MongoDB 的入门工具 |
spring-boot-starter-data-mongodb-reactive |
用于使用 MongoDB 文档导向数据库和 Spring Data MongoDB Reactive 的入门 |
spring-boot-starter-data-mongodb-reactive-test |
用于使用 MongoDB 文档导向数据库和 Spring Data MongoDB Reactive 的入门 |
spring-boot-starter-data-mongodb-test |
用于测试 MongoDB 文档导向数据库和 Spring Data MongoDB 的 Starter |
spring-boot-starter-data-neo4j |
使用 Neo4j 图数据库和 Spring Data Neo4j 的起始程序 |
spring-boot-starter-data-neo4j-test |
Starter for test Neo4j 图数据库和 Spring Data Neo4j |
spring-boot-starter-data-r2dbc |
使用 Spring Data R2DBC 的起始程序 |
spring-boot-starter-data-r2dbc-test |
Start for test Spring Data R2DBC |
spring-boot-starter-data-redis |
Starter 用于使用 Redis 键值数据存储,配合 Spring Data Redis 和 Lettuce 客户端 |
spring-boot-starter-data-redis-reactive |
使用 Redis 键值数据存储,配合 Spring Data Redis 反应式和 Lettuce 客户端 |
spring-boot-starter-data-redis-reactive-test |
用 Spring Data Redis反应式和 Lettuce 客户端测试 Redis 键值数据存储的 Starter |
spring-boot-starter-data-redis-test |
用 Spring Data Redis 和 Lettuce 客户端测试 Redis 键值数据存储的 Starter |
spring-boot-starter-data-rest |
用于使用 Spring Data REST 和 Spring MVC 在 REST 上暴露的 Spring Data 仓库的 Starter |
spring-boot-starter-data-rest-test |
用于测试通过 REST 暴露的 Spring Data 仓库的 Starter Start,使用 Spring Data REST 和 Spring MVC |
spring-boot-starter-elasticsearch |
用于使用 Elasticsearch 搜索和分析引擎的入门 |
spring-boot-starter-elasticsearch-test |
用于测试 Elasticsearch 搜索和分析引擎的起始程序 |
spring-boot-starter-flyway |
使用 Flyway 数据库迁移的起始工具 |
spring-boot-starter-flyway-test |
测试Flyway数据库迁移的起始程序 |
spring-boot-starter-freemarker |
使用FreeMarker的起始工具 |
spring-boot-starter-freemarker-test |
用于测试FreeMarker的起始器 |
spring-boot-starter-graphql |
使用 Spring GraphQL 的起始程序 |
spring-boot-starter-graphql-test |
测试 Spring GraphQL 的起始程序 |
spring-boot-starter-groovy-templates |
使用Groovy模板的入门 |
spring-boot-starter-groovy-templates-test |
测试Groovy模板的入门 |
spring-boot-starter-grpc-client |
使用 Spring gRPC 客户端的起始程序 |
spring-boot-starter-grpc-client-test |
用于测试gRPC客户端的Starter |
spring-boot-starter-grpc-server |
使用 Spring gRPC 服务器的入门程序 |
spring-boot-starter-grpc-server-test |
用于测试gRPC服务器的起始程序 |
spring-boot-starter-gson |
使用GSON的起始 |
spring-boot-starter-gson-test |
用于测试GSON的启动器 |
spring-boot-starter-hateoas |
使用 Spring HATEOS 构建基于超媒体的 RESTful Spring MVC 网页应用的入门工具 |
spring-boot-starter-hateoas-test |
用于测试 Spring HATEOS 以构建基于超媒体的 RESTful Spring MVC 网络应用的起始工具 |
spring-boot-starter-hazelcast |
使用 Hazelcast 的入门 |
spring-boot-starter-hazelcast-test |
测试Hazelcast的起始器 |
spring-boot-starter-integration |
使用 Spring 集成的起始程序 |
spring-boot-starter-integration-test |
用于测试 Spring 集成的起始程序 |
spring-boot-starter-jackson |
用Jackson的起始 |
spring-boot-starter-jackson-test |
测试Jackson的起动机 |
spring-boot-starter-jdbc |
使用 JDBC 搭配 HikariCP 连接池的入门 |
spring-boot-starter-jdbc-test |
用 HikariCP 连接池测试 JDBC 的起始程序 |
spring-boot-starter-jersey |
使用JAX-RS和Jersey的起始机 |
spring-boot-starter-jersey-test |
测试JAX-RS和Jersey的起始器 |
spring-boot-starter-jetty |
用于使用 Jetty 作为嵌入式 servlet 容器的起始器 |
spring-boot-starter-jms |
使用 JMS 的起始程序 |
spring-boot-starter-jms-test |
用于测试JMS的启动器 |
spring-boot-starter-jooq |
用jOOQ访问JDBC数据库的入门工具 |
spring-boot-starter-jooq-test |
用于测试 jOOQ 以访问 JDBC 的 SQL 数据库的 Starter |
spring-boot-starter-json |
用于读写 JSON 的起始程序 |
spring-boot-starter-jsonb |
用于使用 JSON-B 的 Starter |
spring-boot-starter-jsonb-test |
测试 JSON-B 的 Starter |
spring-boot-starter-kafka |
使用 Apache Kafka 的入门 |
spring-boot-starter-kafka-test |
Starter for testing Apache Kafka |
spring-boot-starter-kotlinx-serialization-json |
使用 Kotlinx 序列化 JSON 的起始工具 |
spring-boot-starter-kotlinx-serialization-json-test |
测试Kotlinx Serialization JSON 的Starter |
spring-boot-starter-ldap |
使用 LDAP 的起始码 |
spring-boot-starter-ldap-test |
用于测试LDAP的起始器 |
spring-boot-starter-liquibase |
用于使用 Liquibase 数据库迁移的 Starter |
spring-boot-starter-liquibase-test |
用于测试Liquibase数据库迁移的Starter |
spring-boot-starter-mail |
用于使用 Java Mail 和 Spring Framework 邮件发送支持的 Starter |
spring-boot-starter-mail-test |
用于测试Java Mail和Spring Framework邮件发送支持的Starter |
spring-boot-starter-micrometer-metrics |
用于使用微米计的起始方法 |
spring-boot-starter-micrometer-metrics-test |
测试千米计的起始器 |
spring-boot-starter-mongodb |
用于使用 MongoDB 文档导向数据库的 Starter |
spring-boot-starter-mongodb-test |
用于测试MongoDB文档导向数据库的Starter |
spring-boot-starter-mustache |
使用胡须的起始 |
spring-boot-starter-mustache-test |
测试Mustache的启动器 |
spring-boot-starter-neo4j |
使用 Neo4j 图数据库的起始程序 |
spring-boot-starter-neo4j-test |
Starter for testing Neo4j 图数据库 |
spring-boot-starter-oauth2-authorization-server |
用于使用 Spring 授权服务器功能的 Starter(已被 spring-boot-starter-security-oauth2-authorization-server 取代)) |
spring-boot-starter-oauth2-client |
用于使用 Spring Security 的 OAuth2/OpenID Connect 客户端功能(已被 spring-boot-starter-security-oauth2-client 取代)所弃用) |
spring-boot-starter-oauth2-resource-server |
用于使用 Spring Security 的 OAuth2 资源服务器功能(已被 spring-boot-starter-security-oauth2-resource-server 取代)的 Starter) |
spring-boot-starter-opentelemetry |
使用 OpenTelemetry 的入门 |
spring-boot-starter-opentelemetry-test |
用于测试OpenTelemetry 的起始程序 |
spring-boot-starter-pulsar |
使用 Spring for Apache Pulsar 的入门工具 |
spring-boot-starter-pulsar-test |
测试Spring for Apache Pulsar的起始器 |
spring-boot-starter-quartz |
使用 Quartz 调度器的起始程序 |
spring-boot-starter-quartz-test |
用于测试Quartz调度器的起始器 |
spring-boot-starter-r2dbc |
使用 R2DBC 的起始 |
spring-boot-starter-r2dbc-test |
用于测试R2DBC的起始器 |
spring-boot-starter-reactor-netty |
反应堆网起动器 |
spring-boot-starter-restclient |
使用 Spring 的阻断 HTTP 客户端(RestClient、RestTemplate 和 HTTP Service Clients)的 Starter |
spring-boot-starter-restclient-test |
用于测试 Spring 阻断 HTTP 客户端(RestClient、RestTemplate 和 HTTP Service Clients)的 Starter |
spring-boot-starter-rsocket |
使用 RSocket 的入门工具 |
spring-boot-starter-rsocket-test |
用于测试RSocket的启动器 |
spring-boot-starter-security |
使用 Spring Security 的起始工具 |
spring-boot-starter-security-oauth2-authorization-server |
使用 Spring 授权服务器功能的起始工具 |
spring-boot-starter-security-oauth2-authorization-server-test |
用于测试 Spring 授权服务器功能的起始程序 |
spring-boot-starter-security-oauth2-client |
用于使用 Spring Security OAuth2/OpenID Connect 客户端功能的入门 |
spring-boot-starter-security-oauth2-client-test |
用于测试 Spring Security OAuth2/OpenID Connect 客户端功能的 Starter |
spring-boot-starter-security-oauth2-resource-server |
使用 Spring Security OAuth2 资源服务器功能的起始程序 |
spring-boot-starter-security-oauth2-resource-server-test |
测试 Spring Security OAuth2 资源服务器功能的起始程序 |
spring-boot-starter-security-saml2 |
使用 Spring Security 与 SAML2 的入门 |
spring-boot-starter-security-saml2-test |
用 SAML2 测试 Spring Security 的起始程序 |
spring-boot-starter-security-test |
测试春季安全起始器 |
spring-boot-starter-sendgrid |
用 Sendgrid 使用 Spring Session 的起始程序 |
spring-boot-starter-sendgrid-test |
用 Sendgrid 测试春季课程的起始程序 |
spring-boot-starter-session-data-redis |
使用 Spring Session 搭配 Spring Data Redis的起始程序 |
spring-boot-starter-session-data-redis-test |
用 Spring Data Redis 测试 Spring Session 的起始器 |
spring-boot-starter-session-jdbc |
使用 JDBC 春季课程的入门 |
spring-boot-starter-session-jdbc-test |
测试JDBC春季课程的起始机 |
spring-boot-starter-test |
用于测试包含 JUnit Jupiter、Hamcrest 和 Mockito 等库的 Spring Boot 应用的 Starter |
spring-boot-starter-test-classic |
经典入门工具,用于测试包含 JUnit Jupiter、Hamcrest 和 Mockito 等库的 Spring Boot 应用程序 |
spring-boot-starter-thymeleaf |
使用百海鹦鹉的起始剂 |
spring-boot-starter-thymeleaf-test |
用于测试Thymeleaf的起始器 |
spring-boot-starter-tomcat |
用于使用 Tomcat 作为嵌入式 servlet 容器的起始程序 |
spring-boot-starter-validation |
使用 Java Bean 验证与 Hibernate Validator 的入门 |
spring-boot-starter-validation-test |
用于测试 Hibernate 验证器的 Java Bean 验证的 Starter |
spring-boot-starter-web |
使用 Spring MVC 构建网页应用(包括 RESTful)的 Starter。使用 Tomcat 作为默认嵌入式容器(已被 spring-boot-starter-webmvc 取代) |
spring-boot-starter-web-server-test |
Spring Web Server 测试的起始程序 |
spring-boot-starter-web-services |
用于使用 Spring Web Services 的 Starter(已被 spring-boot-starter-webservices 取代)) |
spring-boot-starter-webclient |
使用 Spring 的反应式 HTTP 客户端(WebClient 和 HTTP Service Clients)的 Starter |
spring-boot-starter-webclient-test |
测试 Spring 反应式 HTTP 客户端(WebClient 和 HTTP Service Clients)的起始工具 |
spring-boot-starter-webflux |
用于使用 WebFlux 和反应器网的起始器 |
spring-boot-starter-webflux-test |
用于测试WebFlux和反应堆Netty的起始器 |
spring-boot-starter-webmvc |
用春季MVC和Tomcat的起始角色 |
spring-boot-starter-webmvc-test |
测试春季MVC和Tomcat的先发机 |
spring-boot-starter-webservices |
使用 Spring Web Services 的起始程序 |
spring-boot-starter-webservices-test |
测试 Spring Web Services 的起始程序 |
spring-boot-starter-websocket |
使用 Spring MVC WebSocket 支持的起始程序 |
spring-boot-starter-websocket-test |
测试 Spring MVC WebSocket 支持的起始程序 |
spring-boot-starter-zipkin |
使用 Zipkin 的起始方法 |
spring-boot-starter-zipkin-test |
测试Zipkin的启动器 |
| [表1。Spring Boot 应用启动程序] |
除了应用程序启动程序外,以下启动程序还可以用于添加生产准备功能:
| 名称 | 描述 |
|---|---|
spring-boot-starter-actuator |
Spring Boot 的 Actuator 入门,提供生产准备功能,帮助你监控和管理应用 |
| [表2。生产启动器] |
最后,Spring Boot还包含以下入门,如果你想排除或替换某些技术细节,可以使用:
| 名称 | 描述 |
|---|---|
spring-boot-starter-jetty-runtime |
Jetty运行时的启动器 |
spring-boot-starter-log4j2 |
使用 Log4j2 的起始程序 |
spring-boot-starter-logback |
使用 Logback 进行日志记录的起始程序 |
spring-boot-starter-logging |
用于记录默认日志的起始程序 |
spring-boot-starter-restdocs |
使用 Spring REST Docs 的 Starter |
spring-boot-starter-tomcat-runtime |
Tomcat运行时的启动器 |
| [表3。] |
如需了解如何交换技术层面,请参阅关于交换网页服务器和日志系统的操作文档。
配置相关的属性及默认值:
Spring Boot Reference Documentation
https://docs.spring.io/spring-boot/docs/3.0.5/reference/htmlsingle/#appendix.application-properties.core注意:springboot只扫描主程序文件夹所在的包和子包。所以写的功能组件放到主程序所在文件夹下。
springboot依赖管理机制
例如:
点击进入spring-boot-starter-web 应用场景。

进入到spring-boot-starter-web.版本.pom 配置文件中,里面配置好了相关的需要依赖。

版本号管理
如果使用的是官方依赖包不要填写版本号
第三方的依赖包需要填写指定的版本号
·每个boot项目都有一个父项目spring-boot-starter-parent

·parent的父项目是spring-boot-dependencies

父项目spring-boot-dependencies版本仲裁中心,把所有常见的jar的依赖版本都声明好了。
自定义版本号:
根据maven的就近原则:
在pom.xml中写上<properties></properties>属性中添加对应的版本,或是在导入依赖配置中直接指定版本号。

像下图一样,我们写的每一个controller下app应用,都会继承制spring-boot-starter-parent,
spring-boot-starter-parent继承制spring-boot-dependencies,spring-boot-dependencies中就制定了很多依赖的版本号。

自定配置机制
自动配置 Tomcat、springMVC等。比如以前我们需要手动配置显示页面组件,字符串编码组件等。现在全部给我们配置好了。
容器中有的就具备这个功能,查看容器中组件:
在主程序中run方法返回的就是我们 容器中具备的组件。

获取run返回的数组进行遍历。
java
@SpringBootApplication //告诉程序这是一个springboot应用程序
public class MainApplication {
public static void main(String[] args) {
// 启动springboot
var ioc=SpringApplication.run(MainApplication.class,args );//固定写法
for (String beanName:ioc.getBeanDefinitionNames()){
System.out.println("容器组件名称:"+beanName);
}
System.out.printf("Hello and welcome!");
}
}
结果:会出现一堆的组件

默认的包扫描规则
@SpringBootApplication 标注的类就是主程序类
·SpringBoot只会扫描主程序所在的包及其下面的子包,相当于自动的给我们配置了component-scan包扫描功能
配置自定义扫描路径
方式一:
在主程序注解 SpringBootApplication中指定扫描的包路径
·@SpringBootApplication(scanBasePackages = "com.haha")
java
@SpringBootApplication(scanBasePackages = "com.haha") //告诉程序这是一个springboot应用程序
public class MainApplication {
public static void main(String[] args) {
// 启动springboot
var ioc=SpringApplication.run(MainApplication.class,args );//固定写法
for (String beanName:ioc.getBeanDefinitionNames()){
System.out.println("容器组件名称:"+beanName);
}
System.out.printf("Hello and welcome!");
}
}
方式二:
使用扫描包注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.haha")
这三个注解等同于@SpringBootApplication(scanBasePackages = "com.haha")
java
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.haha")
public class MainApplication {
public static void main(String[] args) {
// 启动springboot
var ioc=SpringApplication.run(MainApplication.class,args );//固定写法
for (String beanName:ioc.getBeanDefinitionNames()){
System.out.println("容器组件名称:"+beanName);
}
System.out.printf("Hello and welcome!");
}
}
配置默认值
配置文件的所有配置项是和某个类的对象值进行一-绑定的。
例如:application.properties配置文件按住ctrl+点击 port 就会跳转到对应的类属性上

按需自动加载配置
例如:我们导入了spring-boot-starter-webmvc 场景

进入到这个配置中我们会发现他会有一个spring-boot-starter 配置,在每一个场景启动器依赖中都有这个配置。

在这个starter配置中他给我们配置了自动配置,所以所有的场景导入都能自动加载依赖组件
spring-boot-autoconfigur

在下面这个类中会有很多的自动配置类

springboot常用注解
springboot使用了全注解驱动方式。
1.组件注册
@Configuration :标识当前类为配置类
@SpringBootConfiguration:标识当前类为springboot配置类
@Bean:标识当前方法返回的对象为Bean对象 ,默认是单例模式
@Scope("prototype") 每次都重新创建一个实例,多实例
@Controller标记控制器类,处理 HTTP 请求,
@Service标记业务逻辑类,
@Repository标记数据访问组件,
@Component任何需要被 Spring 管理的类都可以用它
@Import(类名称.class):在使用外部第三方类时候直接注册到容器中,组件的名字默认是全类名
@ComponentScan
示例:
1.首先在主程序目录下写一个类Cat

java
public class Cat {
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
}
2.在主程序目录下下一个配置类AppConfig,然后再把Cat类注册到容器中。默认规则方法名就是组件注册到容器名称,这里就是cat

java
@Configuration // @Configuration :标识当前类为配置类
public class AppConfig {
@Scope("prototype") //多实例
@Bean // @Bean :标识当前方法返回的对象为Bean对象
public Cat cat(){
//创建出Cat对象,并通过构造方法给对象赋值,返回对象
return new Cat("tom", 2);
}
}
也可以在注解上设置注册组件的名称,如下:
java
@Bean("cat001") // @Bean :标识当前方法返回的对象为Bean对象
public Cat cat(){
return new Cat("tom", 2);
}
使用第三方组件:
1.创建一个自定义配置类,添加上注解@Configuration
2.在自定义类中写一个方法,new出对象并返回,并在方法上添加注解@Bean
java
@configuration
public class AppConfig {
@Bean
public FastsqlException fastsqlException(){//方法名就是容器中组件名称
return new FastsqlException();//创建第三方组件类
}
}
导入第三方组件到容器也可以使用@Import(类名称.class):在使用外部第三方类时候直接注册到容器中,组件的名字默认是全类名
条件注解 (@ConditionalOnXxx)
如果注解放在类上控制整个类,放在方法上控制的是方法
Spring Boot 中的条件注解(Conditional Annotations)位于 org.springframework.boot.autoconfigure.condition 包下,用于根据特定条件决定是否加载某个 Bean 或配置类。以下是常用的条件注解及其说明:

1. 基于类的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnClass |
当类路径下存在指定类时,条件成立 |
@ConditionalOnMissingClass |
当类路径下不存在指定类时,条件成立 |
java
@ConditionalOnClass(name = "com.mysql.cj.jdbc.Driver") //当类路径下存在指定类时,条件成立
public class MySQLConfig {
//注解中的类存在执行这里的代码
...
}
2. 基于 Bean 的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnBean |
当容器中存在指定 Bean 时,条件成立 |
@ConditionalOnMissingBean |
当容器中不存在指定 Bean 时,条件成立 |
@ConditionalOnSingleCandidate |
当容器中指定类型的 Bean 只有一个候选者时,条件成立 |
java
@ConditionalOnBean(name = "dataSource") //容器中存在名称dataSource 组件执行JdbcTemplateConfig 方法
public class JdbcTemplateConfig {
}
@ConditionalOnMissingBean(name = "dataSource") //容器中不存在名称为dataSource 执行defaultService方法
public DefaultService defaultService() {
}
3. 基于属性的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnProperty |
当配置文件中存在指定属性且满足条件时,条件成立 |
java
@ConditionalOnProperty(
prefix = "app.feature",
name = "enabled",
havingValue = "true",
matchIfMissing = false
)
public class FeatureConfig { }
4. 基于资源的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnResource |
当类路径下存在指定资源时,条件成立 |
java
@ConditionalOnResource(resources = "classpath:config/custom.yml")
public class CustomConfig { }
5. 基于应用类型的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnWebApplication |
当前是 Web 应用时(Servlet 或 Reactive),条件成立 |
@ConditionalOnNotWebApplication |
当前不是 Web 应用时,条件成立 |
java
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
public class ServletConfig { }
6. 基于表达式的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnExpression |
当 SpEL 表达式结果为 true 时,条件成立 |
java
@ConditionalOnExpression("${app.feature.enabled:false} && ${app.feature.advanced:false}")
public class AdvancedFeatureConfig { }
7. 基于 Java 版本的条件
| 注解 | 说明 |
|---|---|
@ConditionalOnJava |
当运行时的 Java 版本满足条件时成立 |
java
@ConditionalOnJava(range = ConditionalOnJava.Range.OR_NEWER, value = JavaVersion.TWENTY_ONE)
public class Java21FeatureConfig { }
8. 其他条件
| 注解 | 说明 |
|---|---|
@ConditionalOnJndi |
当存在指定 JNDI 时,条件成立 |
@ConditionalOnWarDeployment |
当应用以 WAR 包形式部署时,条件成立 |
@ConditionalOnNotWarDeployment |
当应用不是以 WAR 包形式部署时,条件成立 |
属性绑定
@ConfigurationProperties
@EnableConfigurationProperties(类名称.class) //一般用于第三方包属性导入
如果我们需要在application.properties 中配置属性值。
将容器中任意组件(Bean)的属性值和配置文件的配置项的值进行绑定
1.写一个bean类,标记注解@Component,将这个类注册到容器中,在添加注解@ConfigurationProperties(prefix="pig")把 application.properties配置文件里以 pig. 开头的属性,自动映射到这个类的字段上。
java
@ConfigurationProperties(prefix="pig") //将配置文件中的属性批量绑定到 Java 对象上
@Component //将pig类放到容器中
public class Pig {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pig{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2.在配置类中,给属性赋值

3.在主程序中,获取容器中对象属性值
java
@SpringBootApplication
public class Demo2Application {
public static void main(String[] args) {
var ioc =SpringApplication.run(Demo2Application.class, args);
var pig = ioc.getBean( Pig.class); //获取容器中Pig组件
System.out.println(pig);
}
}
输出结果:打印了配置文件中的值

方式二:在配置类中创建Pig对象添加注解
步骤1中我们是在Pig类上添加了注解@ConfigurationProperties(prefix="pig") @Component
以下类并没有注解
java
public class Pig {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pig{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
在配置类中添加注解@Bean ,@ConfigurationProperties(prefix="pig") ,创建对象
java
@Configuration // @Configuration :标识当前类为配置类
public class AppConfig {
@ConfigurationProperties(prefix="pig")
@Bean
public Pig pig(){
return new Pig();
}
}
@EnableConfigurationProperties注解方式
这个注解直接导入我们的类,并且自动注入到容器中。
例如:
java
@ConfigurationProperties(prefix="pig") //将配置文件中的属性批量绑定到 Java 对象上
public class Pig {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pig{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
配置类上添加注解
@EnableConfigurationProperties(Pig.class) 开启属性绑定,自动把组件放入容器中
java
@EnableConfigurationProperties(Pig.class)
@Configuration // @Configuration :标识当前类为配置类
public class AppConfig {
@ConfigurationProperties(prefix="pig")
@Bean
public Pig pig(){
return new Pig();
}
}
自动配置
核心流程:
1、导入starter,就会导入autoconfigure 包。
2、autoconfigure 包里面 有个文件 META-INF/spring/org.springframework.boot.autoconfigur
e.AutoConfiguration.imports ,里面指定的所有启动要加载的自动配置类
3、@EnableAutoConfiguration 会自动的把上面文件里面写的所有自动配置类都导入进来xxxAutoConfiguration是有条件注解进行按需加载
4、xxxAutoConfiguration给容器中导入一堆组件,组件都是从xxxProperties中提取属性值
5、xxxProperties又是和配置文件进行了绑定

最终实现效果:导入starter,修改配置文件,就能修改底层行为。
实践整合readis
1.查找需要导入starter场景,如果是springboot官方提供的可以到Spring Boot Reference Documentation
https://docs.spring.io/spring-boot/docs/3.0.5/reference/htmlsingle/#appendix.application-properties.core 官网查询提供的starter

找到参考文档


2.在pom.xml中添加场景配置

3.按下ctrl+N 搜索一下自动配置类例如搜索:RedisAutoConfiguration

4.找到自动配置类打开,看见这个redis自动配置类全部属性绑定与DataRedisProperties.class类上面
5.看到文件中所有和redis配置都是使用 spring.data.redis 开头

6.在application.yaml中做相应的属性配置

7.我们在查看这个这个配置类中提供了那些组件

8.使用提供的组件

YAML配置文件
·设计目标,就是方便人类读写
·层次分明,更适合做配置文件
·使用.yaml或.yml作为文件后缀
1.基本语法
·大小写敏感
·使用缩进表示层级关系,k:v,使用空格分割k,v
·缩进时不允许使用Tab键,只允许使用空格。
·缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
·#表示注释,从这个字符一直到行尾,都会被解析器忽略。
支持的写法:
·对象:键值对的集合,如:映射(map)/哈希(hash)/字典(dictionary)·
数组:一组按次序排列的值,如:序列(sequence)/列表(list)·


纯量:单个的、不可再分的值,如:字符串、数字、bool、日期
大文本
| 开头,大文本写在下层,保留文本格式,换行符正确显示
> 开头,大文本写在下层,折叠换行符

·多文档合并使用
**---**可以把多个yaml文档合并在一个文档中,每个文档区依然认为内容独立

lombok插件自动生成get/set
XML
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope> <!--compile 是编译阶段 -->
</dependency>
使用:
@Data // @Data 自动生成javaBean的getter和setter方法
@NoArgsConstructor // @NoArgsConstructor 自动生成无参构造方法
@AllArgsConstructor // @AllArgsConstructor 自动生成全参构造方法
java
@Component
@Data // @Data 自动生成javaBean的getter和setter方法
@NoArgsConstructor // @NoArgsConstructor 自动生成无参构造方法
@AllArgsConstructor // @AllArgsConstructor 自动生成全参构造方法
public class Cat {
private String name;
private int age;
}