首页 > 其他分享 >深入探索 Spring Boot 自动配置原理

深入探索 Spring Boot 自动配置原理

时间:2023-08-12 23:00:41浏览次数:39  
标签:探索 自定义 Spring 配置 Boot MyService 自动

Spring Boot 是一个流行的微服务框架,以其自动配置功能而闻名。这种自动配置使得开发人员可以快速搭建和部署应用程序,而无需显式地配置大量的组件。在本篇博客中,我们将深入探索 Spring Boot 自动配置的原理,了解它是如何工作的,并通过实例代码演示自定义自动配置。

1. 自动配置的背后

Spring Boot 的自动配置基于条件化装配(Conditional Bean Registration)原理。它通过分析应用程序的依赖和配置,根据条件自动注册适合的 Bean。

自动配置的步骤包括:

  1. Spring Boot 启动时,自动扫描类路径下的 META-INF/spring.factories 文件,其中包含了各种自动配置类的定义。
  2. Spring Boot 根据应用程序的依赖和配置,确定需要启用的自动配置类。
  3. 根据自动配置类,Spring Boot 注册所需的 Bean 到 Spring 上下文中。

2. 自定义自动配置

Spring Boot 允许开发人员自定义自动配置,以满足特定的应用需求。以下是一个简单的示例,展示如何创建一个自定义的自动配置类:

@Configuration
@ConditionalOnClass(MyService.class)
@EnableConfigurationProperties(MyProperties.class)
public class MyAutoConfiguration {

    @Autowired
    private MyProperties properties;

    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyService(properties.getMessage());
    }
}

在上述示例中,我们创建了一个自动配置类 MyAutoConfiguration,用于配置一个名为 MyService 的 Bean。我们使用了 @ConditionalOnClass 注解来指定在类路径中存在 MyService 类时才启用自动配置。@EnableConfigurationProperties 注解用于启用属性配置类。通过 @ConditionalOnMissingBean 注解,我们只有在上下文中不存在 MyService Bean 时才注册。

3. 属性配置类

为了配合自定义自动配置,我们还需要创建一个属性配置类 MyProperties

@ConfigurationProperties("my")
public class MyProperties {

    private String message = "Hello, World!";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

在上述示例中,我们使用了 @ConfigurationProperties 注解,将配置文件中以 my 开头的属性映射到 MyProperties 类的字段。

4. 测试自定义自动配置

要测试自定义的自动配置,我们需要在应用程序中引入自动配置类所在的包,并添加相关的依赖。

首先,创建一个 Spring Boot 应用类:

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

然后,在配置文件中添加相关配置:

my.message=Hello, Custom Auto Configuration!

5. 运行和验证

启动应用程序后,MyService 将会根据自定义的自动配置进行初始化,并使用在配置文件中定义的属性值。

6. 总结

通过本文,我们深入探索了 Spring Boot 自动配置的原理。我们了解了自动配置背后的条件化装配原理,并演示了如何创建自定义的自动配置。Spring Boot 的自动配置功能极大地简化了应用程序的配置和开发,使得开发人员能够更专注于业务逻辑的实现。

标签:探索,自定义,Spring,配置,Boot,MyService,自动
From: https://blog.51cto.com/u_16200744/7062578

相关文章

  • springmvc学习之com.fasterxml.jackson.core:jackson-databind:pom:2.15.2 failed to
    -错误的原因是我们通过坐标依赖导入的jar包没有完全下载,也就是下载了一半就停了,是个下载类型的文件而不是真正的jar包,出现这种错误的原因典型的就比如我这种情况,正在下载的时候断网了,然后这个网络链接突然中断,此时文件就是一个损坏的半成品,Maven中的代码似乎不能像迅雷那样继续下......
  • Spring AOP详解
    1. AOP编程介绍OOP:面向对象编程,以对象为中心,进行程序的设计和开发。AOP:面向切面编程,以程序中的切面为中心,进行程序的设计和开发。可以把业务功能和非业务功能进行分离。实现AOP编程的方式:1)动态代理模式2)使用Spring的AOP模块3)AspectJ:专业的切面框架切面:程序中,一些通用的功能和方法......
  • Spring IOC介绍及其使用
    1. SpringIOCCoreContainer:核心容器(Spring容器,IOC容器)1.1 IOC容器IOC容器:控制反转容器,对象的实例化和赋值的控制权,从硬编码转移到了容器中。从思想层面,解释容器的作用。反转:某些事情,自己不做,交给别人去做,把执行的结果,拿来直接用。正转:自己的事情,自己做DI:依赖注入,从功能角度,解......
  • IDEA集成docker并快速部署Springboot项目
    前言:现在docker是我们常用的服务部署方式了,在微服务中对于springboot部署到docker一般有两种方式1、把jar包扔给运维同学,由他们进行编写dockerfile或者其他方式部署。(不推荐)2、由开发同学处理后把镜像或者容器上传到服务器(企业级常用方式)下面我们就通过demo来看下方式二......
  • SpringBatch读取mysql数据
    1.在本地数据库创建user表建表语句:createtable`user`(`id`bigintnotnullauto_incrementcomment'主键',`name`varchar(32)defaultnullcomment'用户名',`age`intdefaultnullcomment'年龄',primarykey(id))engine=innodbde......
  • springboot集成log4j2日志
    目录Maven依赖log4j2.xml配置注释测试参考Maven依赖参考:https://docs.spring.io/spring-boot/docs/2.7.14/reference/htmlsingle/#howto.logging.log4j <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</a......
  • Springboot - 员工部门案例
    目录查询全部部门信息查询全部部门信息//知识点1:@RequestMapping(value="/list",method=RequestMethod.GET)等价于:@GetMapping("/list")//知识点2:privatestaticLoggerlogger=LoggerFactory.getLogger(DeptController.class);等价于@Slf4j(lombok.extern.slf......
  • Spring:登录功能如何做
    前言今天是2023年8月12号,周六,今天不用上班,只是前几天得知消息我前项目组的同事们被裁员,说不定哪个明天就轮到我了吧,所以今天过来公司,研究下公司项目架构,离职的时候带点东西也不算亏说回登录,我还未工作前,行内人一直告诉我登录功能很简单应届生应该都应该会,可工作两年的我发现,登录......
  • SpringBoot3数据库集成
    标签:Jdbc.Druid.Mybatis.Plus;一、简介项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富;通过如下几个组件来实现数据库的整合;Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力;MybatisPlus框架:基于Mybatis框......
  • SpringBoot3数据库集成
    标签:Jdbc.Druid.Mybatis.Plus;一、简介项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富;通过如下几个组件来实现数据库的整合;Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力;MybatisPlus框架:基于Mybatis......