微信游戏网站源码怎么做,seodg官网,表格可以做网站么,江山市建设局网站Spring条件评估器 1. ConditionEvaluator是干嘛的2. 先看其属性类ConditionContextImp context3. 看ConditionEvaluator 的内部方法4. AnnotationTypeMetadata 是干嘛的5. Condition 接口 1. ConditionEvaluator是干嘛的 内部的使用类,用来评估注解的 2. 先看其属性类Condition… Spring条件评估器 1. ConditionEvaluator是干嘛的2. 先看其属性类ConditionContextImp context3. 看ConditionEvaluator 的内部方法4. AnnotationTypeMetadata 是干嘛的5. Condition 接口 1. ConditionEvaluator是干嘛的 内部的使用类,用来评估注解的 2. 先看其属性类ConditionContextImp context
private static class ConditionContextImpl implements ConditionContext {Nullableprivate final BeanDefinitionRegistry registry;Nullableprivate final ConfigurableListableBeanFactory beanFactory;private final Environment environment;private final ResourceLoader resourceLoader;Nullableprivate final ClassLoader classLoader;// 构造器, 实例化时构造这些参数public ConditionContextImpl(Nullable BeanDefinitionRegistry registry,Nullable Environment environment, Nullable ResourceLoader resourceLoader) {this.registry registry;this.beanFactory deduceBeanFactory(registry);this.environment (environment ! null ? environment : deduceEnvironment(registry));this.resourceLoader (resourceLoader ! null ? resourceLoader : deduceResourceLoader(registry));this.classLoader deduceClassLoader(resourceLoader, this.beanFactory);}Nullable// 根据子类类型推到出beanFactoryprivate ConfigurableListableBeanFactory deduceBeanFactory(Nullable BeanDefinitionRegistry source) {if (source instanceof ConfigurableListableBeanFactory) {return (ConfigurableListableBeanFactory) source;}if (source instanceof ConfigurableApplicationContext) {return (((ConfigurableApplicationContext) source).getBeanFactory());}return null;}// 获取到环境private Environment deduceEnvironment(Nullable BeanDefinitionRegistry source) {if (source instanceof EnvironmentCapable) {return ((EnvironmentCapable) source).getEnvironment();}return new StandardEnvironment();}// 推到出资源加载器private ResourceLoader deduceResourceLoader(Nullable BeanDefinitionRegistry source) {if (source instanceof ResourceLoader) {return (ResourceLoader) source;}// 不是ResouceLoader类型的话就初始化一个默认资源加载器return new DefaultResourceLoader();}Nullable// 不解释啦看不懂就别看了private ClassLoader deduceClassLoader(Nullable ResourceLoader resourceLoader,Nullable ConfigurableListableBeanFactory beanFactory) {if (resourceLoader ! null) {ClassLoader classLoader resourceLoader.getClassLoader();if (classLoader ! null) {return classLoader;}}if (beanFactory ! null) {return beanFactory.getBeanClassLoader();}return ClassUtils.getDefaultClassLoader();}Override// 获取beanDefinition注册器public BeanDefinitionRegistry getRegistry() {Assert.state(this.registry ! null, No BeanDefinitionRegistry available);return this.registry;}OverrideNullable// 返回beanFactorypublic ConfigurableListableBeanFactory getBeanFactory() {return this.beanFactory;}Overridepublic Environment getEnvironment() {return this.environment;}Overridepublic ResourceLoader getResourceLoader() {return this.resourceLoader;}OverrideNullablepublic ClassLoader getClassLoader() {return this.classLoader;}
}
// Context information for use by Condition implementations
// 条件实现类使用的上下文信息类
public interface ConditionContext {// 获取BeanDefinition信息BeanDefinitionRegistry getRegistry();// 这不用说获取容器ConfigurableListableBeanFactory getBeanFactory();// 获取环境Environment getEnvironment();// 获取资源加载器ResourceLoader getResourceLoader();// 获取类加载器ClassLoader getClassLoader();
}3. 看ConditionEvaluator 的内部方法
// 构造器
public ConditionEvaluator(Nullable BeanDefinitionRegistry registry,Nullable Environment environment, Nullable ResourceLoader resourceLoader) {// 根据参数实例化条件上下文this.context new ConditionContextImpl(registry, environment, resourceLoader);
}// 是否跳过
public boolean shouldSkip(AnnotatedTypeMetadata metadata) {return shouldSkip(metadata, null);
}public boolean shouldSkip(Nullable AnnotatedTypeMetadata metadata, Nullable ConfigurationPhase phase) {if (metadata null || !metadata.isAnnotated(Conditional.class.getName())) {return false;}if (phase null) {if (metadata instanceof AnnotationMetadata ConfigurationClassUtils.isConfigurationCandidate((AnnotationMetadata) metadata)) {return shouldSkip(metadata, ConfigurationPhase.PARSE_CONFIGURATION);}return shouldSkip(metadata, ConfigurationPhase.REGISTER_BEAN);}ListCondition conditions new ArrayList();for (String[] conditionClasses : getConditionClasses(metadata)) {for (String conditionClass : conditionClasses) {Condition condition getCondition(conditionClass, this.context.getClassLoader());conditions.add(condition);}}AnnotationAwareOrderComparator.sort(conditions);for (Condition condition : conditions) {ConfigurationPhase requiredPhase null;if (condition instanceof ConfigurationCondition) {requiredPhase ((ConfigurationCondition) condition).getConfigurationPhase();}if ((requiredPhase null || requiredPhase phase) !condition.matches(this.context, metadata)) {return true;}}return false;
}4. AnnotationTypeMetadata 是干嘛的
// 用于获取元素上的注解的元数据不用看了
MergedAnnotations getAnnotations();default boolean isAnnotated(String annotationName) {return getAnnotations().isPresent(annotationName);
}default MapString, Object getAnnotationAttributes(String annotationName) {return getAnnotationAttributes(annotationName, false);
}default MapString, Object getAnnotationAttributes(String annotationName,boolean classValuesAsString) {MergedAnnotationAnnotation annotation getAnnotations().get(annotationName,null, MergedAnnotationSelectors.firstDirectlyDeclared());if (!annotation.isPresent()) {return null;}return annotation.asAnnotationAttributes(Adapt.values(classValuesAsString, true));
}default MultiValueMapString, Object getAllAnnotationAttributes(String annotationName) {return getAllAnnotationAttributes(annotationName, false);
}default MultiValueMapString, Object getAllAnnotationAttributes(String annotationName, boolean classValuesAsString) {Adapt[] adaptations Adapt.values(classValuesAsString, true);return getAnnotations().stream(annotationName).filter(MergedAnnotationPredicates.unique(MergedAnnotation::getMetaTypes)).map(MergedAnnotation::withNonMergedAttributes).collect(MergedAnnotationCollectors.toMultiValueMap(map -map.isEmpty() ? null : map, adaptations));
}5. Condition 接口
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);