Springboot源码解析-@Configuration注解如何被解析的?

@SpringBootApplication包含三个注解:

@EnableAutoConfiguration
@ComponentScan(basePackages="com.xxx")
@SpringBootConfiguration 等同于 @Configuration ,只是换了个别名

SpringBoot程序推断应用类型未Servlet,设置ApplicationContext的实例为AnnotationConfigApplicationContext ,就在这里设置了内置的internalConfigurationAnnotationProcessor,刷新上下文的时候,调用内置的internalConfigurationAnnotationProcessor,其实例为ConfigurationClassPostProcessor , 交由ConfigurationClassPostProcessor驱动,委托ConfigurationClassParser负责解析

解析流程如下:

1.解析memberClass 也就是Configuration注解的内部还有一个@Configuration修饰的类 参考 WebSocketServletAutoConfiguration 类 里面的TomcatWebSocketConfiguration类 这就是memberClass,memberClass仍然是一个独立的Configuration注解,可以有bean注解,import注解等。

2.解析PropertySource注解

2.解析ComponentScan , ComponentScans 注解 指定basePackages 最常用的基于注解的配置就是在这里被ComponentScanParser解析的 ,放入到configurationClasses里面
格式是

@Configuration
public class xxx{

@Bean
public Test test(){

}   

}

3.解析@Import注解
若@Import(value=xxx.class), xxx 是 ImportSelector 的子类, 这种功能等同于 自定义一些类来作为配置类来加载 ...等同于@Configuration ,可以参考类 @EnableAsync 注解 ,等同于 @Import(AsyncConfigurationSelector.class)
若@Import(value=xxx.class), xxx 是 ImportBeanDefinitionRegistrar 的子类, 放入 importBeanDefinitionRegistrars 属性里 ,可以参考 @EnableFeignClients 注解 ,

4.解析@ImportResource注解,可以兼容老版本的基于xml配置文件的bean配置
@ImportResource({ "classpath:spring/applicationContext-caffeine-cache.xml" })

5.解析@Bean方法注解,将@Bean配置的方法放入属性beanMethods里面

6.如果有实现某个实现类,将实现类的默认方法上带@Bean注解的放入到属性beanMethods里面

7.处理父类

注解式的ApplicationContext提供了6个内置的postProcessor来支持特定的注解,比如
0 = "org.springframework.context.annotation.internalConfigurationAnnotationProcessor" , 支持@Configuration @Import @ImportSource @ComponentScan @PropertySource @Bean
1 = "org.springframework.context.annotation.internalAutowiredAnnotationProcessor"
2 = "org.springframework.context.annotation.internalRequiredAnnotationProcessor"
3 = "org.springframework.context.annotation.internalCommonAnnotationProcessor"
4 = "org.springframework.context.event.internalEventListenerProcessor"
5 = "org.springframework.context.event.internalEventListenerFactory"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值