美文网首页
【Spring源码】16.IOC之ConfigurationCl

【Spring源码】16.IOC之ConfigurationCl

作者: 天还下着毛毛雨 | 来源:发表于2023-02-04 21:49 被阅读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

    相关文章

      网友评论

          本文标题:【Spring源码】16.IOC之ConfigurationCl

          本文链接:https://www.haomeiwen.com/subject/ovxohdtx.html