SpingBoot3入门学习一

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 Reference Documentationhttps://docs.spring.io/spring-boot/docs/3.0.5/reference/htmlsingle/#appendix.application-properties.core

小结:

导入相关的场景,拥有相关的功能。

官方提供的场景命名: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 Documentationhttps://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 Documentationhttps://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;
}
相关推荐
噗噗夹的TA之旅1 小时前
Shader 学习 21:自定义 Render Feature
学习·游戏·unity·c#·游戏引擎·图形渲染
码农小韩2 小时前
AIAgent应用开发——大模型理论基础与应用(七)
python·学习·ai·大模型·agent
流云鹤3 小时前
05Java学习day(5)
java·学习
only-lucky3 小时前
QML深入学习五(Controls模块)
前端·javascript·学习
Yolanda_20223 小时前
Python学习-第九部分-错误处理与异常处理
开发语言·python·学习
一只小菜鸡..4 小时前
南京大学 操作系统 (JYY) 学习笔记:CPU 的局限、GPU 与 AI 时代的算力革命
人工智能·笔记·学习
知识分享小能手5 小时前
高等数学学习教程,从入门到精通,定积分 — 知识点全面总结(9)
学习·算法·机器学习
~光~~5 小时前
【嵌入式linux学习_OV8858 bring up】L2_V4L2与Ov8858
linux·数据库·学习
520拼好饭被践踏6 小时前
JAVA+Agent学习day26
java·开发语言·数据结构·学习·agent