spring知识点-springboot源码解析

本文详细解析了Spring Boot项目的启动流程,包括容器创建、bean加载过程及自动装配原理。阐述了如何通过@SpringBootApplication注解实现配置类定义、自动装配及组件扫描等功能。

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

springboot启动类如下:

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

如何启动? 如何加载装配bean?

一:如何启动?

跟踪SpringApplication.run方法

其实主要功能就是创建SpringContext,并初始化,刷新等。 具体看一下:

createApplicationContext(): 使用java反射创建具体的容器

容器创建后开始bean的加载,跟踪prepareContext方法:

在做了一系列准备后,进入load方法

可以看到在load方法中,获取了一个BeanDefinitionLoader用来加载bean。  剩下的事情,就是spring中如何处理BeanDefinition了,包括刷新方法,也只是激活spring中的刷新方法。

所以,启动做的事情很简单,说白了就是创建容器,加载bean。  但是,加载哪个路径下的bean?  pom中添加的依赖bean又是如何装配到容器,比如starter如何生效的?

二: 自动装配

进入@SpringBootApplication,看到有三个核心注解:

1、@SpringBootConfiguration: 其实就是spring的@Configuration,表明是一个配置类
2、@EnableAutoConfiguration:开启自动装配功能,是springboot的核心
有两个核心注解:
@AutoConfigurationPackage: 使用Import注解给容器导入了Registrar

此类中有个registerBeanDefinitions方法,使用debug跟踪可以发现metadata中刚好是启动类的路径。
所以@AutoConfigurationPackage的作用: 获取启动类路径,结合@ComponentScan注解扫描组件并注入容器
 @Import({AutoConfigurationImportSelector.class})
在此类中
可以看到加载了此路径下的spring.factories文件。 然后经过一系列的过滤,最终将里面配置的类通过反射,实例化为标注了@Configuration 的配置类,并加载到spring 容器
所以,第三方jar包中类加载为spring容器的bean,需要在spring.factories文件中配置,并放在META-INF下。  
3、@ComponentScan
结合上面@AutoConfigurationPackage注解得到的启动类路径,扫描组件注入容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值