SpringBoot自动配置原理

文章详细阐述了SpringBoot的自动配置原理,包括基于依赖的自动配置、Redis的配置示例,以及SpringBoot应用的启动流程,涉及到SpringApplication的构造与run方法执行过程。此外,还介绍了@Import注解的作用,它在自动配置中的重要性,以及如何通过条件注解控制组件的注入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SpringBoot自动配置原理

1.定义

他是基于你依赖的Jar包,对SpringBoot应用进行自动配置,为SpringBoot的开箱即用提供的基础支撑

2.SpringBoot自动装配的实例

Redis的自动配置
1.引入redis的相关依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2.配置Redis的服务器

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379

3.直接使用

public class Spring {
    @Autowired
    private RedisTemplate<Object,Object> redisTemplate;

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
}

3.SpringBoot的启动流程

一、SpringBoot启动的时候,会构造一个SpringApplication的实例,构造SpringApplication的时候会进行初始化的工作,初始化的时候会做以下几件事:

1、把参数sources设置到SpringApplication属性中,这个sources可以是任何类型的参数.
2、判断是否是web程序,并设置到webEnvironment的boolean属性中.
3、创建并初始化ApplicationInitializer,设置到initializers属性中 。
4、创建并初始化ApplicationListener,设置到listeners属性中 。
5、初始化主类mainApplicatioClass。

二、SpringApplication构造完成之后调用run方法,启动SpringApplication,run方法执行的时候会做以下几件事:

1、构造一个StopWatch计时器,用来记录SpringBoot的启动时间 。
2、初始化监听器,获取SpringApplicationRunListeners并启动监听,用于监听run方法的执行。
3、创建并初始化ApplicationArguments,获取run方法传递的args参数。
4、创建并初始化ConfigurableEnvironment(环境配置)。封装main方法的参数,初始化参数,写入到 Environment中,发布 ApplicationEnvironmentPreparedEvent(环境事件),做一些绑定后返回Environment。
5、打印banner和版本。
6、构造Spring容器(ApplicationContext)上下文。先填充Environment环境和设置的参数,如果application有设置beanNameGenerator(bean)、resourceLoader(加载器)就将其注入到上下文中。调用初始化的切面,发布ApplicationContextInitializedEvent(上下文初始化)事件。
7、SpringApplicationRunListeners发布finish事件。
8、StopWatch计时器停止计时,日志打印总共启动的时间。
9、发布SpringBoot程序已启动事件(started())
10、调用ApplicationRunner和CommandLineRunner
11、最后发布就绪事件ApplicationReadyEvent,标志着SpringBoot可以处理就收的请求了(running())

4.@Import

作用:他的作用是提供了一种显示地从其他类加载配置类的方式,一共有3种
1.普通类
2.接口ImportSelector的实现类
3.接口ImportBeanDefinitionRegistrar的实现类

个人理解:

首先自动配置需要的核心在于@EableAutoConfigration,而他又依赖于@Import注解,该注解可以通过放实现ImportRegister接口的实现类,将相关或者需要的bean注入容器中,而该实现类需要到spring.factories里面去找对应的自动配置类,而每个配置类中都@Conditonal,只有在满足@Conditonal中指定的所有条件后,才可以向容器中注入组件。这样即可完成springBoot的自动配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值