SpringBoot自动配置原理详解

1 前言

之前也写过一篇类似的文章,但是当时理解的并不是很深入,所以一直想重新写,但是一直没有时间,就拖到了现在。这篇文章可能会很长,因为在讲解自动配置的过程中还会衍生出其他一些重要的知识点,我也会进行介绍。

2 热身案例

要谈 SpringBoot 的自动装配,肯定离不开下面这段代码。

其实我学习 SpringBoot 时,根本没有思考过这段代码,只知道这是 SpringBoot 程序的启动类,要保证他能够覆盖所有要扫描的包,然后就去写代码了。

我们先来看看这段代码:

ConfigurableApplicationContext run = SpringApplication.run(AppRunApplication.class, args);
复制代码

这段代码的作用是启动 SpringBoot 应用程序,并返回一个 ConfigurableApplicationContext 对象的实例。

SpringApplication.run() 方法返回的是 ConfigurableApplicationContext 类型的对象,表示 Spring 应用程序的上下文。这个上下文保存了Spring 容器中所有 bean 的引用,对于应用程序中的其他组件来说,这个上下文就是一个全局共享的容器。

SpringApplication.run(AppRunApplication.class, args) 语句的意义是基于 AppRunApplication 这个类启动 SpringBoot 应用程序,并将命令行参数传递给应用程序。运行这个语句后,Spring会自动进行应用程序的初始化工作,包括创建ApplicationContext、注册所有的bean定义、启动嵌入式Web容器、加载应用程序的配置文件等。

此外,通过这个方法还可以获取到 ConfigurableApplicationContext 的实例,使用这个对象可以进一步控制应用程序的运行,如手动关闭应用程序、获取应用程序的环境变量、添加自定义的bean等。

只看文字实在时太枯燥了,我们还是看看代码吧。我们在启动类,创建了一个 Test 类,然后生命了一个 Bean 方法,它的作用就是返回一个 Test 类,然后我们进行断点调试。

太神奇了,我们通过 run 拿到了 Test 的 Bean 实例

如果我们试图获取一个没有使用 Bean 方法注册的类,就会抛出异常。

这个 run 其实 可以简单地理解为 Spring 的 IOC 容器,SpringBoot 启动时会自动帮我们配置程序运行需要的使用的 Bean 对象放到 IOC 容器中,我们在其他类需要使用时只需要使用 @Autowire 或者 @Resource 注解进行依赖注入即可。

Spring Boot 自动配置是 Spring Boot 框架的一项核心特性,它可以基于应用程序的依赖关系和配置信息,
自动配置应用程序所需的 Spring Bean。Spring Boot 自动配置是通过条件化配置实现的,
这意味着只有在特定条件下才会应用这些配置。这些条件可以是应用程序的依赖关系、配置值、环境变量等等。

Spring Boot 提供了许多 Starter 包,这些 Starter 包为应用程序添加了一组默认的依赖关系和配置信息,
以便应用程序能够正常运行。例如,Spring Boot Starter Web 包为应用程序添加了 
Spring MVC、Tomcat 等 Web 相关的依赖关系和配置信息。当应用程序添加了 Spring Boot Starter Web 包时,
Spring Boot 会自动配置应用程序的 Web 相关配置。

自动装配是指Spring Boot的依赖注入机制,它会根据需要自动为应用程序中的Bean注入依赖关系。
例如,当一个类需要使用JdbcTemplate来访问数据库时,Spring Boot会自动将JdbcTemplate对象注入到这个类中,
而不需要程序员手动编写任何配置代码。
复制代码

如下图,我们在项目中要使用 Redis ,只需要在 pom 文件中引入相关依赖,然后在 application.yml 文件中配置相关连接参数,之后的累活就全部交给 SpringBoot 自动进行配置,我们使用时只需要使用 @Autowire 或者 @Resource 注解进行依赖注入即可

通过上面的讲解,我们对 SpringBoot 自动配置有了一个大概的认识——我们需要什么,就在 pom 文件中引入相关依赖,然后在 application.yml 文件中配置相关配置信息,然后 SpringBoot 会帮我们把需要的 Bean 都自动配置到 Spring IOC 容器中,之后我们使用时只需要通过依赖注入机制将需要的 Bean 对象注入即可。

到现在,我们应该知道了 SpringBoot 自动配置是什么,但是这样我们只是知其所以然,所以我们还需要继续了解它的底层实现。

3 源码解读

我们把目光来到今天的主角,@SpringBootApplication 注解。

我们进入这个注解,好嘛,它的头上怎么顶着这么多注解,不过真正重要的只有三个注解,我们接下来会一一介绍。

3.1 @SpringBootConfiguration

点进@SpringBootConfiguration 注解,可以发现其核心注解为@Configuration注解:

@Configuration注解是Spring框架的注解之一,用于标记配置类。

在Spring Boot中,使用@Configuration注解可以将该类作为配置类,从而使该类中的Bean可以被

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值