当前位置: 首页 > news >正文

SpringBoot基础详解

目录

SpringBoot自动配置

基于条件的自动配置

调整自动配置的顺序

纷杂的SpringBoot Starter

手写简单spring-boot-starter示例



SpringBoot自动配置

用一句话说自动配置:@EnableAutoConfiguration借助SpringFactoriesLoader将标准了@Configuration的JavaConfig类汇总加载到ApplicationContext。

基于条件的自动配置

在自动配置的基础上,我们可以通过@Conditional配合@Configuration或者@Bean来干预配置或者bean定义是否能够生效,类似于下面伪代码的效果:

if(符合@Conditional规定的条件) {加载当前配置或者注册当前bean的定义;
}

常见的 @Conditional 注解及其作用:

  1. @ConditionalOnClass:当指定的类位于类路径上时,才加载配置的 Bean。这可用于在依赖库存在时加载 Bean。

    @Configuration
    @ConditionalOnClass(MyLibraryClass.class)
    public class MyConfiguration {// 配置 Bean
    }
  2. @ConditionalOnMissingClass:与 @ConditionalOnClass 相反,当指定的类不存在于类路径上时,才加载配置的 Bean。

    @Configuration
    @ConditionalOnMissingClass("com.example.SomeClass")
    public class MyConfiguration {// 配置 Bean
    }
  3. @ConditionalOnProperty:根据指定的配置属性是否存在,来加载 Bean。可用于在应用程序的属性文件中控制 Bean 的加载。

    @Configuration
    @ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
    public class MyConfiguration {// 配置 Bean
    }
  4. @ConditionalOnExpression:基于 SpEL 表达式的计算结果来加载 Bean。

    @Configuration
    @ConditionalOnExpression("${myapp.feature.enabled}")
    public class MyConfiguration {// 配置 Bean
    }
  5. @ConditionalOnWebApplication:当应用程序运行在 Web 环境下(例如,Spring MVC 或 Spring Boot)时,加载配置的 Bean。

    @Configuration
    @ConditionalOnWebApplication
    public class MyWebConfiguration {// 配置 Web 相关 Bean
    }
  6. @ConditionalOnJava:当运行应用程序的 Java 版本满足指定条件时,加载 Bean。

    @Configuration
    @ConditionalOnJava(range = ConditionalOnJava.Range.EQUAL_OR_NEWER, value = JavaVersion.EIGHT)
    public class MyJava8Configuration {// 配置 Java 8 相关 Bean
    }
调整自动配置的顺序

@AutoConfigureBefore和@AutoConfigureAfter是 Spring Boot 自动配置中的注解,它们用于控制自动配置类的加载顺序。这些注解允许我们明确指定自动配置类的加载顺序,以确保在加载自动配置类时符合特定的依赖关系。

以下是它们的作用和用法:

  1. @AutoConfigureBefore

    • @AutoConfigureBefore 注解用于指定一个或多个自动配置类,它告诉 Spring Boot 在加载当前自动配置类之前先加载指定的自动配置类。

    • 这可以用于确保在当前自动配置类之前配置某些依赖,以满足特定的应用程序需求。

    • 示例:

      @Configuration
      @AutoConfigureBefore(AnotherAutoConfiguration.class)
      public class MyAutoConfiguration {// 配置 Bean
      }
  2. @AutoConfigureAfter

    • @AutoConfigureAfter 注解用于指定一个或多个自动配置类,它告诉 Spring Boot 在加载当前自动配置类之后加载指定的自动配置类。

    • 这可以用于确保在当前自动配置类之后配置某些依赖,以满足特定的应用程序需求。

    • 示例:

      @Configuration
      @AutoConfigureAfter(AnotherAutoConfiguration.class)
      public class MyAutoConfiguration {// 配置 Bean
      }

纷杂的SpringBoot Starter

Spring Boot Starters 是一组官方维护的依赖关系,用于简化 Spring Boot 应用程序的配置和引导。它们旨在为特定类型的应用程序或用例提供一组默认的依赖项,以减少配置工作和提高开发效率。以下是一些常见的 Spring Boot Starters:

  1. spring-boot-starter-web:用于构建 Web 应用程序的 Starter,包括 Spring MVC、嵌入式 Servlet 容器(如Tomcat或Jetty)以及其他与 Web 相关的依赖项。适用于开发 RESTful Web 服务和传统的 Web 应用程序。

  2. spring-boot-starter-data-jpa:用于访问关系型数据库的 Starter,包括 Spring Data JPA、Hibernate 和数据源配置。适用于构建基于 JPA 的数据访问层。

  3. spring-boot-starter-data-mongodb:用于访问 MongoDB 的 Starter,包括 Spring Data MongoDB 和 MongoDB 驱动。适用于构建使用 MongoDB 的应用程序。

  4. spring-boot-starter-data-redis:用于访问 Redis 的 Starter,包括 Spring Data Redis 和 Redis 客户端。适用于构建使用 Redis 的应用程序。

  5. spring-boot-starter-data-solr:用于访问 Apache Solr 的 Starter,包括 Spring Data Solr 和 Solr 客户端。适用于构建使用 Solr 的搜索应用程序。

  6. spring-boot-starter-data-elasticsearch:用于访问 Elasticsearch 的 Starter,包括 Spring Data Elasticsearch 和 Elasticsearch 客户端。适用于构建使用 Elasticsearch 的搜索应用程序。

  7. spring-boot-starter-security:用于添加 Spring Security 支持的 Starter,包括身份验证和授权功能。适用于构建安全的应用程序。

  8. spring-boot-starter-test:用于测试 Spring Boot 应用程序的 Starter,包括JUnit、Spring Test、Mockito 和其他测试框架。适用于单元测试和集成测试。

  9. spring-boot-starter-actuator:用于添加 Spring Boot Actuator 支持的 Starter,包括监控和管理功能,如健康检查、度量、追踪等。

  10. spring-boot-starter-logging:用于日志记录的 Starter,包括 Logback、Log4j2 和其他日志框架。适用于配置应用程序的日志输出。

  11. spring-boot-starter-parent:这是一个父项目 Starter,它用于管理 Spring Boot 应用程序的依赖版本,通常作为 Spring Boot 项目的父项目引用。

  12. spring-boot-starter-xxx:除上述常见的 Starter 外,还有许多其他官方和社区维护的 Starter,如消息队列(如Kafka、RabbitMQ)、NoSQL 数据库(如Cassandra、Couchbase)等。

手写简单spring-boot-starter示例

在了解自动配置的原理后,就简单地创建一个自定义的spring-boot-starter吧。

文件目录贴一下:

  1. 创建自动配置类和需要定义的bean。

    @Configuration
    public class MyUserAutoConfiguration {@Beanpublic UserManager userManager(){return new UserManager();}
    }
    public class UserManager {public String sayHello() {return "own-starter:hello.";}
    }
  2. src/main/resources/META-INF/ 目录下创建一个 spring.factories 文件

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.lloyd.user.MyUserAutoConfiguration
  3. 创建一个spring-web的SpringBoot项目,添加自定义Starter的依赖。

        <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 自定义starter的坐标 --><dependency><groupId>com.lloyd</groupId><artifactId>springboot_06_own_starter</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
  4. 创建一个Rest接口进行验证

    @RestController
    public class UserController {@Autowiredprivate UserManager userManager;
    ​@GetMapping("/user")public String sayHello(){return userManager.sayHello();}
    }

    浏览器结果:

http://www.lryc.cn/news/197588.html

相关文章:

  • 学会Docker之---应用场景和基本操作
  • C++_linux下_非阻塞键盘控制_程序暂停和继续
  • SQL AND, OR and NOT(与,或不是运算符)
  • Python网络编程之Socket(套接字)
  • 金山终端安全系统V9.0 SQL注入漏洞复现
  • Radius OTP完成堡垒机登录认证 安当加密
  • ROS opencv 人脸识别
  • 文心一言 4.0 ERNIE-Bot 4.0 :ERNIE-Bot 4.0 大模型深度测试体验报告
  • 华为OD机考B卷 | 100分】阿里巴巴找黄金宝箱(JAVA题解——也许是全网最详)
  • 请求转发和重定向区别
  • JS如何判断对象为空?以及各自的缺点。
  • 同城代驾开源版小程序开发
  • 【Python机器学习】零基础掌握ShrunkCovariance协方差估计
  • 精神科常用评估量表汇总,建议收藏!
  • Python之切片
  • OpenCV显示中文(python)
  • k8s-18 认证授权
  • WebAPI+EF连接SQL Server数据库
  • maven-plugin-shade 详解1
  • C#中LinkedList、Queue<T>和Stack<T>的使用
  • 流程图如何制作?好用的11款流程图软件盘点!
  • windows本地文件上传linux 或 linux输入rz命令后出现receive.**B0100000023be50
  • C# CodeFormer Inpainting 人脸填充
  • 将Sketch文件转化为PSD文件的简单在线工具!
  • 【广州华锐互动】利用AR进行野外地质调查学习,培养学生实践能力
  • Jmeter快速入门
  • 详解js数组操作——filter()方法
  • 基于MATLAB的图像条形码识别系统(matlab毕毕业设计2)
  • F5.5G落进现实:目标网带来的光之路
  • Python调用c++生成的dll