死磕Spring原理--Spring扫描包过程

本文详细解析了Spring框架中使用JavaConfig方式和扫描包位置方式加载Bean定义的过程,包括AnnotationConfigApplicationContext的构造器、register方法、refresh方法以及ClassPathBeanDefinitionScanner.doScan()等关键步骤。

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

无论使用哪种方式,最终都会使用ClassPathBeanDefinitionScanner.doScan()方法

使用JavaConfig方式

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(XXX.class);

分成两步:

  1. 先加载主类这个BeanDefinition – register()
  2. 再根据主类上的@ComponentScan("xxx.yy")去扫描加载 –refresh()

第一步在AnnotationConfigApplicationContext的构造器中的register(componentClasses)方法中完成

第二步在下面步骤中完成


refresh()
->invokeBeanFactoryPostProcessors()
->PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors()
->ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry//有多个相似的处理器,Component相关的注解使用现在这个处理器
->processConfigBeanDefinitions()
->ConfigurationClassParser.parse()
->parse(AnnotationMetadata metadata, String beanName)//方法重载,注意这里是AnnotationMetadata
->doProcessConfigurationClass()
->ComponentScanAnnotationParser.parse()
->ClassPathBeanDefinitionScanner.doScan()

使用扫描包位置方式

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("xxx.yy");

会直接在构造器中的scan(basePackages)方法中扫描出所有的类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值