概述
前面我们简介了spring boot的自动配置机制,现在我们来探讨下spring boot是如何解决这么多繁荣复杂的自动配置类之间的依赖顺序的。
sort
在上一篇《Spring @AutoConfiguration源码详解》中,
EnableAutoConfigurationImportSelector中使用了自动配置类的排序
private
List<String> sort(List<String> configurations)
throws
IOException {
configurations =
new
AutoConfigurationSorter(getMetadataReaderFactory())
.getInPriorityOrder(configurations);
return
configurations;
}
MetadataReaderFactory
我们看到排序的函数用到了MetadataReaderFactory,它的作用生成对应类的MetadataReader 来获取标注的注解等元数据。
public interface
MetadataReaderFactory {
//通过类名获取MetadataReader
MetadataReader getMetadataReader(String className)
throws
IOException;
//通过resource获取MetadataReader,resource包含了.class file路径
MetadataReader getMetadataReader(Resource resource)
throws
IOException;
}
private
MetadataReaderFactory getMetadataReaderFactory() {
try
{
//默认从容器中获取元数据工厂
return