【Spring源码】16.IOC之ConfigurationCl

2023-02-04  本文已影响0人  天还下着毛毛雨

1.前言

这个类在spring ioc容器中是重中之重。

首先他是实现BeanDefinitionRegistryPostProcessor接口,那么就会实现这个接口的这两个方法。

void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException;
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;

postProcessBeanDefinitionRegistry方法可以拿到BeanDefinitionRegistry对象 容器里所有的BeanDefinition,再进行过滤解析工作。

以支持 @Component / @ComponentScan / @Import / @ImportResource 以及@Configuration,@Bean等注解功能。

2.过滤BeanDefinition集合

先遍历容器中的所有BeanDefinition,如果类上存在@Component / @ComponentScan / @Import / @ImportResource 或者有@Bean的方法,将他的 BeanDefinition,加入 待解析BD集合

image

2.1 获取BeanDefinition里 类的metadata元数据对象

这个对象里会收集类的所有元数据 信息,这里最主要的是获取 类上的注解,这里可以看到当前解析的bean是有@Component注解的

image

2.2 判断是否有@Configuration 注解

如果有Configuration注解,会往BeanDefinition对象里的设置一个变量

org.springframework.context.annotation.ConfigurationClassPostProcessor.configurationClass -> full

image

2.3.判断是否有@Component / @ComponentScan / @Import / @ImportResource / 某个方法有Bean注解

如果满足上诉注解条件,会往BeanDefinition对象里的设置一个变量

org.springframework.context.annotation.ConfigurationClassPostProcessor.configurationClass -> lite

image

2.3.1 isConfigurationCandidate(metadata)

1. 判断类上是否有@Component / @ComponentScan / @Import / @ImportResource 注解

image

遍历这个集合,看是否有匹配的,这个集合在静态代码块里 初始化的,就是这四个注解

image

2.判断方法上是否@Bean注解

image

最终过滤 完成,加入到待解析的beanDifination集合中

image
上一篇下一篇

猜你喜欢

热点阅读