表示该自动配置类在其他指定的自动配置类之前应用。 与标准的@Configuration配置类相同。
表示该自动配置类在其他指定的自动配置类之后应用。 与标准的@Configuration配置类相同。
指定自动配置类的顺序性,值越小优先级越高。 与标准的@Configuration配置类相同。
它是以上三个注解的底层的顺序控制的实现逻辑。
下面重点看下getInPriorityOrder(…)方法。
首先按照类名的数字顺序或者字典顺序排序。 然后按照@AutoConfigureOrder指定的顺序排序。 最后按照@AutoConfigureBefore、@AutoConfigureAfter依赖的顺序排序。
接下来分析下@AutoConfigureOrder的底层实现原理。
实际上是比较AutoConfigurationClass的getOrder()方法。
MetadataReaderFactory -> MetadataReader -> AnnotationMetadata -> AnnotationAttributes。 获取@AutoConfigureOrder注解的value值。
接着看@AutoConfigureBefore、@AutoConfigureAfter注解的解析原理。
对所有自动配置类按照注解指定的顺序排序。
排序的过程。
排序的核心算法。
获取之前、之后的类名集合。
获取value、name属性的值。