今天在看Springsecurity(4.3.x.RELEASE)的WebSecurityConfiguration时,看到AnnotationAwareOrderComparator,就写下自己的感受...List-1 private static class AnnotationAwareOrderComparator extends OrderComparator { private static...final AnnotationAwareOrderComparator INSTANCE = new AnnotationAwareOrderComparator(); @Override...) { return order.value(); } } return Ordered.LOWEST_PRECEDENCE; } } 如List-1所示,AnnotationAwareOrderComparator
>) value); } } } AnnotationAwareOrderComparator AnnotationAwareOrderComparator继承自OrderComparator...@Order注解@since 2.0,AnnotationAwareOrderComparator它@since 2.0.1,几乎同时出现的 它提供了两个静态方法,使用非常广泛,方便我们对数组、即可记性排序...: public class AnnotationAwareOrderComparator extends OrderComparator { /** * 用来检查实现Ordered接口、@Order
AutowiredWebSecurityConfigurersIgnoreParents( beanFactory).getWebSecurityConfigurers(); webSecurityConfigurers.sort(AnnotationAwareOrderComparator.INSTANCE...for (SecurityConfigurer config : webSecurityConfigurers) { Integer order = AnnotationAwareOrderComparator.lookupOrder...classLoader) { this.beanClassLoader = classLoader; } /** * A custom version of the Spring provided AnnotationAwareOrderComparator...* * @author Rob Winch * @since 3.2 */ private static class AnnotationAwareOrderComparator extends...OrderComparator { private static final AnnotationAwareOrderComparator INSTANCE = new AnnotationAwareOrderComparator
org.springframework.cloud.gateway.route.Route; import org.springframework.core.Ordered; import org.springframework.core.annotation.AnnotationAwareOrderComparator...AnnotationAwareOrderComparator.sort(combined); if (logger.isDebugEnabled()) { logger.debug("Sorted
AnnotationAwareOrderComparator.sort(combined); logger.debug("Sorted gatewayFilterFactories:...false); ArrayList mappings = new ArrayList(mappingBeans.values()); AnnotationAwareOrderComparator.sort...HandlerAdapter.class, true, false); this.handlerAdapters = new ArrayList(adapterBeans.values()); AnnotationAwareOrderComparator.sort...HandlerResultHandler.class, true, false); this.resultHandlers = new ArrayList(beans.values()); AnnotationAwareOrderComparator.sort
(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) {...beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE); }
webSecurity.debug(debugEnabled); } Collections.sort(webSecurityConfigurers, AnnotationAwareOrderComparator.INSTANCE...SecurityConfigurer config : webSecurityConfigurers) { Integer order = AnnotationAwareOrderComparator.lookupOrder...* * @author Rob Winch * @since 3.2 */ private static class AnnotationAwareOrderComparator...extends OrderComparator { private static final AnnotationAwareOrderComparator INSTANCE = new...AnnotationAwareOrderComparator(); @Override protected int getOrder(Object obj)
CompositePropertySource( BOOTSTRAP_PROPERTY_SOURCE_NAME); //对propertySourceLocators数组进行排序,根据默认的AnnotationAwareOrderComparator...AnnotationAwareOrderComparator.sort(this.propertySourceLocators); boolean empty = true...根据默认的 AnnotationAwareOrderComparator 排序规则对propertySourceLocators数组进行排序 获取运行的环境上下文ConfigurableEnvironment
> instances = createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names); AnnotationAwareOrderComparator.sort...instantiate " + type + " : " + name, ex); } } return instances; } 实例化的过程如果,没有什么特别需要讲解的; 上面有个方法AnnotationAwareOrderComparator.sort
> instances = createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names); AnnotationAwareOrderComparator.sort...ApplicationRunner.class).values()); runners.addAll(context.getBeansOfType(CommandLineRunner.class).values()); AnnotationAwareOrderComparator.sort
filters.addAll(loadGatewayFilters(routeDefinition.getId(), routeDefinition.getFilters())); } AnnotationAwareOrderComparator.sort...} } return ordered; } getFilters主要是利用loadGatewayFilters获取filter,返回使用AnnotationAwareOrderComparator
最后调用AnnotationAwareOrderComparator进行排序。 List-3 private Collection<ApplicationListener<?...} } catch (NoSuchBeanDefinitionException var13) { } } } AnnotationAwareOrderComparator.sort
asUnmodifiableOrderedSet(Collection elements) { List list = new ArrayList(elements); list.sort(AnnotationAwareOrderComparator.INSTANCE...); return new LinkedHashSet(list);}注意看 asUnmodifiableOrderedSet 方法中的 AnnotationAwareOrderComparator
= null) { // AnnotationAwareOrderComparator:这是一个带有注解感知的比较器,用来排序Bean的依赖 // 它比标准的比较器多了对...(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) { beanFactory.setDependencyComparator...(AnnotationAwareOrderComparator.INSTANCE); } // ContextAnnotationAutowireCandidateResolver:...volatile List beanDefinitionNames = new ArrayList(256); ... } 获取到默认Bean工厂以后,设置了两个重要属性 AnnotationAwareOrderComparator
(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) { beanFactory.setDependencyComparator...(AnnotationAwareOrderComparator.INSTANCE); } if (!
(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) { //注册了实现Order...接口的排序器 beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE); } //设置
, false); ArrayList mappings = new ArrayList(mappingBeans.values()); AnnotationAwareOrderComparator.sort...HandlerAdapter.class, true, false); this.handlerAdapters = new ArrayList(adapterBeans.values()); AnnotationAwareOrderComparator.sort...HandlerResultHandler.class, true, false); this.resultHandlers = new ArrayList(beans.values()); AnnotationAwareOrderComparator.sort
(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) { beanFactory.setDependencyComparator...(AnnotationAwareOrderComparator.INSTANCE); } // 2.指定容器使用的AutowireCandidateResolver...return beanDefs; } 上面这段代码,主要做了8件事,接下来我们就详细看看 指定容器使用的比较器,通过这个比较器能够解析@Order注解以及Ordered接口 指定容器中使用的比较器为AnnotationAwareOrderComparator...OrderComparator自身提供了对Ordered接口的处理功能,而AnnotationAwareOrderComparator进一步做了扩展,除了会处理Ordered接口外还会处理@Order注解
instances = this.createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names); AnnotationAwareOrderComparator.sort
(beanFactory.getDependencyComparator() instanceof AnnotationAwareOrderComparator)) {.../** * AnnotationAwareOrderComparator主要能解析@Order和@Priority */...beanFactory.setDependencyComparator(AnnotationAwareOrderComparator.INSTANCE); }...EVENT_LISTENER_FACTORY_BEAN_NAME)); } return beanDefs; } 主要流程就是获取DefaultListableBeanFactory,然后注册AnnotationAwareOrderComparator
领取专属 10元无门槛券
手把手带您无忧上云