SpringBoot 自动装配原理

零、前言

Spring简直是java企业级应用开发人员的春天,我们可以通过Spring提供的ioc容器,避免硬编码带来的程序过度耦合。但是,启动一个Spring应用程序也绝非易事,他需要大量且繁琐的xml配置,开发人员压根不能全身心的投入到业务中去。
因此,SpringBoot诞生了,虽然本质上还是属于Spring,但是SpringBoot的优势在于以下两个特点:

  1. 约定大于配置

SpringBoot定义了项目的基本骨架,例如各个环境的配置文件统一放到resource中,使用active来启用其中一个。配置文件默认为application.properties,或者yaml、yml都可以。

  1. 自动装配

以前在Spring使用到某个组件的时候,需要在xml中对配置好各个属性,之后被Spring扫描后注入进容器。
而有了SpringBoot后,我们仅仅需要引入一个starter,就可以直接使用该组件,如此方便、快捷,得益于自动装配机制。

一、定义

什么是SpringBoot的自动装配?

SpringBoot 自动装配,英文是 Auto-Configuration,是指在Spring Boot启动时,通过一系列机制和注解,将第三方组件或配置类加载到Spring容器中,并生成相应的Bean对象供使用。这一过程极大地简化了开发工作,提高了效率,为 SpringBoot 框架的 “开箱即用”提供了基础支撑;
具体来说,SpringBoot的自动装配主要依赖以下几个关键点

  1. 注解:SpringBoot提供了多个注解来实现自动装配,例如@SpringBootApplication@EnableAutoConfiguration@ComponentScan等。这些注解帮助SpringBoot识别并加载需要自动配置的类。
  2. 条件化配置:SpringBoot利用条件化配置(@Conditional注解)来决定是否进行某些配置。例如,如果类路径下存在某个特定的jar包,则自动配置相应的功能。
  3. 元数据文件:SpringBoot会在启动时扫描META-INF/spring.factories 文件,从中获取需要进行自动装配的类,并执行这些类中的配置操作。
  4. 场景启动器:SpringBoot还引入了场景启动器(如WebMvcAutoConfiguration),根据项目中添加的依赖自动配置相应的功能。
  5. 约定大于配置:SpringBoot遵循“约定大于配置”的原则,通过默认配置减少开发者手动编写配置的必要性。例如,在没有明确配置的情况下,SpringBoot会自动配置数据库连接、视图解析器等。
  6. SPI机制:自动装配与Spring的SPI(Service Provider Interface)机制相似,都是通过反射机制动态加载和实例化组件。更多SPI讲解:深入理解 Java SPI - 概念、原理、应用

二、启动流程

SpringBoot启动流程的简化版代码

public static void run(Class<?> primaryClass) {
   
   
    //1.创建一个 ApplicationContext 实例,即我们常说的IoC容器
    ApplicationContext context = createApplicationContext();
    // 2.将主类(primaryClass)注册到IoC容器中(简单但很重要的一步)
    loadSourceCLass(context, primaryClass);
    // 3.递归加载并处理所有的配置类
    processConfigurationClasses(context);
    // 4.实例化所有的单例Bean(Singleton Bean)
    instantiateSingletonBeans(context);
    // 5.如果时web应用,则启动web服务器(如Tomcat)
    startWebServer(context);
}

图解:
启动流程.png
详解第三步核心流程:
加载配置类流程.png
图解:
加载配置流程图.png

三、原理剖析

一切都从注解 @SpringBootApplication 说起:

@SpringBootApplication
public class Application {
   
   

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

@SpringBootApplication

@SpringBootApplication 注解又是一个组合注解

@Target(ElementType.TYPE)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小天努力学java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值