如何解析@Configuration、@Bean以及@Component
LD is tigger forever,CG are not brothers forever, throw the pot and shine forever. Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people. talk is cheap, show others the code,Keep progress,make a better result. Survive during the day and develop at night。
目录
概述
实现思路分析
注解的方式Spring是如何解析@Configuration、@Bean以及@Component
1.AbstractAppccaitoonContext中的refresh()方法,调用invokeBeanFactoryPostProcessors(beanFactory),回调实现了BeanFactoryPostProcessor 的类中的postProcessBeanFactory(beanFactory) 方法。
2.ConfigurationClassPostProcessor 称作配置类后置处理器 ConfigurationClassPostProcessor 称作配置类后置处理器,该后置处理器会检查容器中目前存在的BeanDefination 是否有@Configuratin 注解,有的话就将这些BeanDefination 委托给ConfigurationClassParser 去解析并封装成ConfigurationClass ,在该类的doProcessConfigurationClass(configClass, sourceClass) 方法中,会处理上面传入的BeanDefination @ComponentScan,@Import、@ImportResource、@Bean 这些注解,并封装成ConfigurationClass: 1)对于@ComponentScan 注解,会委托给ComponentScanAnnotationParser 处理,根据需要扫描的包路径,获取路径下所有的@Component,@Repository,@Service,@Controller 组件 封装成BeanDefination,注册到容器(BeanDefinitionRegistry)中
2)对于@Import,获取该注解中的其他配置类,重复上面ConfigurationClassParser 对于ConfigurationClass 的处理
3)对于@ImportResource,解析注解的属性,比如locations,并放入ConfigurationClass 的importedResources(就一Map) 属性中
4)对于@Bean 注解修饰的方法,解析其方法元数据,封装成MethodMetadata,放入ConfigurationClass 的beanMethods(就一Set)属性中
相关工具如下:
分析:
小结:
主要讲述了注解配置方式的Spring 是如何解析@Configuration、@Bean以及@Component, 里面有许多不足,请大家指正~
参考资料和推荐阅读
1.链接: 参考资料. 2.链接: 参考资料.
|