因为上一篇过长,因此一些细节部分未分析,所以这里单独拉一篇分析上一篇未分析到的一些细节部分;
spring类扫描顺序默认是按类名字来进行排序的,如:a、b、c;
但是类的顺序可以实现Ordered接口来进行修改,数字越小越靠前;
我们以上一篇BeanFactoryPostProcessor排序方法进行分析吧
org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors
这里比较关键的是,如果你没有指定比较器则会使用默认的比较器
默认的比较器会根据getOrder方法获取一个数值来进行比较,所以这里关键的是getOrder方法里面做了什么,这样我们就搞清楚了spring是如何通过Ordered接口实现类排序的;
其实用过这个接口的读者应该清楚,实现这个接口会让你实现一个getOrder方法,这个方法里面会返回一个int,其实就是获取这个int值进行比较的;
前面的if一般不会进去,我们看getOrder方法就好了
这里需要关注是findOrder方法会去判断类是否实现了Ordered接口,如果实现了则调用其getOrder方法获取对应的值,否则则会返回空,上层方法感知到返回为空,则会返回默认值,默认为Integer.MAX_VALUE,无限大的int值;如果是默认值必定为最后;
/** * Useful constant for the lowest precedence value. * @see java.lang.Integer#MAX_VALUE */int LOWEST_PRECEDENCE = Integer.MAX_VALUE;
留言与评论(共有 0 条评论) “” |