Spring Boot自动装配

57 阅读1分钟
  • 装配过程

    ConfigurationClassPostProcessor在它的postProcessBeanDefinitionRegistry()中将调用到 AutoConfigurationImportSelector。

    Selector通过getCandidateConfigurations()收集META-INF下的spring.factories元数据。

    这些元数据就是我们约定俗成的需要装配的Bean。

    最后Processor将这些Bean注入到Spring容器中。

    而这个Select则是由@EnableAutoConfiguration的@Import注解导入的。

  • 时序图
sequenceDiagram
SpringApplication->> Context: applicationContext.refresh()
Context ->> Delegate: ...
    Delegate ->> Processor: ...
    Processor ->> Processor:postProcessBeanDefinitionRegistry(registry)
    Processor ->> Parser:parser.parse(candidates)
    Parser ->> Selector : getCandidateConfigurations()
    Selector ->> spring.factories : 收集配置信息
    Selector -->> Parser : 配置信息
    Parser -->> Processor : 配置信息
    Processor ->> Reader : reader.loadBeanDefinitions(configClasses)
    Reader ->> Reader : 加载Bean Definitions
    

以上就是大概的时序图,简化了类名。

如果客官感兴趣想要自己debug的话,我建议只要关注两个地方:

  • ConfigurationClassPostProcessor1的postProcessBeanDefinitionRegistry()
  • AutoConfigurationImportSelector的getCandidateConfigurations()

可能会有人回答得更全面,但我花一天时间读完之后确实觉得没有意义(除了面试)。

那些花时间去看的人大概是真的没有女朋友吧(好吧,我也没有)。

至于里面用了哪些子类、哪些设计模式,在一个小时之后我又忘了。

[1]  后置处理器