springboot自动装配过程

自动装配:根据classpath下的类、jar包转化为spring ioc中的bean。

@SpringBootApplication
触发时机都是在
spring refresh invokeBeanFactoryPostProcessors
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());

调用ConfigurationClassPostProcessor处理器加载processConfigBeanDefinitions方法中调用ConfigurationClassParser类来解析@SpringBootConfiguration、@ComponentScan 、@EnableAutoConfiguration

org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions

直接new一个ConfigurationClassParser 解析器
		// Parse each @Configuration class
		ConfigurationClassParser parser = new ConfigurationClassParser(
				this.metadataReaderFactory, this.problemReporter, this.environment,
				this.resourceLoader, this.componentScanBeanNameGenerator, registry);

调用parse方法解析
org.springframework.context.annotation.ConfigurationClassParser#parse(java.util.Set<org.springframework.beans.factory.config.BeanDefinitionHolder>)

1、解析@SpringBootConfiguration,实际就是解析@Configuration标注的Bean类、方法,从候选者转化为BD,BeanFactory使用enhancer生成cglib代理来拦截Bean的method。

//解析@Configuration
org.springframework.context.annotation.ConfigurationClassParser#processConfigurationClass

//enhancer使用cglib proxy来拦截方法。
org.springframework.context.annotation.ConfigurationClassEnhancer

2、 解析@ComponentScan标注的Bean类、方法解析到内存,从候选者转化为BD。

org.springframework.context.annotation.ConfigurationClassParser#doProcessConfigurationClass

Set<AnnotationAttributes> componentScans = AnnotationConfigUtils.attributesForRepeatable(
      sourceClass.getMetadata(), ComponentScans.class, ComponentScan.class);
3、 在spring刷新阶段提前导入在spring.factories中需要自动装配的配置类,使用@EnableAutoConfiguration的自动配置类为org.springframework.boot.autoconfigure.EnableAutoConfiguration,其他比如redis、rabitmq、roketmq等默认的配置类都在这里反射实现。
//决定是否配置可以自动装配功能
  org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector

//使用递归方式导入ImportSelector自动装配的Bean
org.springframework.context.annotation.ConfigurationClassParser#processImports

//EnableAutoConfigurationImportSelector的子类实现AutoConfigurationImportSelector,
这里使用SpringFactoriesLoader来加载META-INF/spring.factories下默认自动装配的类,包括
org.springframework.boot.autoconfigure.EnableAutoConfiguration和其他redis、RocketMQ、RabitMq
等jar包中的配置类。
org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#selectImports
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值