<context:component-scan base-package="">解析流程
2020-08-29 15:05:25 0 举报
解析流程
作者其他创作
大纲/内容
ComponentScanBeanDefinitionParser
getNamespaceURI
2、完成BeanDefinition的注册
1、创建扫描器
BeanDefinitionParserDelegate.parseCustomElement
findCandidateComponents
doScan
1、getHandlerMappings
init
PathMatchingResourcePatternResolver
在init方法中完成了具体标签解析类的注册
parse
configureScanner
加载META-INF/spring.handlers配置文件,并把里面的内容建立映射关系,其实就是namespaceUri和NamespaceHandler的映射
DefaultNamespaceHandlerResolver
标签解析
1、递归获取.class后缀的文件
根据namespaceUri获取namespaceHandler
ClassPathBeanDefinitionScanner
resolve
1、registerComponents,完成注解的注册:比如:ConfigurationClassPostProcessor,AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor
根据namespaceUri从映射关系中获取到的实例类就是ContextNamespaceHandler,调用它的init的方法
context:component-scanhttp://www.springframework.org/schema/context
3、如果匹配说明该类是需要实例化的类,则创建BeanDefinition对象
component-scan标签的解析
1、getMetadataReader获取元数据:AnnotationMetadataReadingVisitor元数据收集了扫描到类的任何信息
ContextNamespaceHandler
ClassPathScanningCandidateComponentProvider
scanCandidateComponents
2、判断includeFilters中的注解是否跟元数据中的注解匹配
getResources
1、processCommonDefinitionAnnotations支持@Lazy@Primary@DependsOn注解,从元数据中获取,并封装到beanDefinition相应属性中
0 条评论
下一页
为你推荐
查看更多