spring5源码--xml配置文件中的自定义标签解析
Spring中有个DefaultNamespaceHandlerResolver类,默认处理namespace的类,也包含自定义namespace,在该类的getHandlerMappings()方法中PropertiesLoaderUtils.loadAllProperties(this.handlerMappingsLocation 加载完成之后是Properties这种key value结构,这个handlerMappingsLocation的值是spring.handlers
在spring.handlers文件中找到url 对应的解析类:org.springframework.context.config.ContextNamespaceHandler extends NamespaceHandlerSupport 可以看到继承了spring的一个空间解析类。
通过以上的图中关系,最后spring构建出每一个uri标签所对应的解析类封装成一个Map
component-scan 属性值是一个包地址,spring会用doScan方法扫描该包地址下所有的class文件:
1 去扫描基本包的路径,找class文件
2 递归找.class文件
3 判断.class文件里面是否有注解,includeFilter里面的注解@Component, 像其他的@Controller @Service @Repository 都是继承自@Component
4 变成beanDefinition对象
所有的步骤,到最后都是为了生成一个BeanDefinition对象,而一个BeanDefinitionHolder里由三个对象组成:BeanDefinition; beanName; aliasesArray
end.