先看一下类注解和翻译
/**
* Convenient adapter for programmatic registration of annotated bean classes.
* This is an alternative to {@link ClassPathBeanDefinitionScanner}, applying
* the same resolution of annotations but for explicitly registered classes only.
*/
方便的适配器,用于以编程方式注册带注释的Bean类。
这是ClassPathBeanDefinitionScanner的补充方法,
它应用注释的相同决策,但仅适用于显式注册的类。
类图可见,并无继承关系
构造器:
public AnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry) {
this(registry, getOrCreateEnvironment(registry));
}
/**
* Create a new {@code AnnotatedBeanDefinitionReader} for the given registry and using
* the given {@link Environment}.
* @param registry the {@code BeanFactory} to load bean definitions into,
* in the form of a {@code BeanDefinitionRegistry}
* registry用于加载beanDefinition
* @param environment the {@code Environment} to use when evaluating bean definition
* profiles.
* environment 用于评估BeanDefinition
* @since 3.1
*/
public AnnotatedBeanDefinitionReader(BeanDefinitionRegistry registry, Environment environment) {
Assert.notNull(registry, "BeanDefinitionRegistry must not be null");
Assert.notNull(environment, "Environment must not be null");
this.registry = registry;
//ConditionEvaluator是用于评估@Conditional这个注解的
this.conditionEvaluator = new ConditionEvaluator(registry, environment, null);
//在给定的BeanDefinitionRegistry中注册所有相关的注解后处理器
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
}
类内public方法:
1. ConditionEvaluator,是用于评估@Conditional这个注解的
this.conditionEvaluator = new ConditionEvaluator(registry, environment, null);
ConditionEvaluator 对外仅暴露了下面两个方法,用于根据@Conditional注解判断是否应该跳过加载
public boolean shouldSkip(AnnotatedTypeMetadata metadata)
public boolean shouldSkip(@Nullable AnnotatedTypeMetadata metadata, @Nullable ConfigurationPhase phase)
2. 往BeanDefinitionRegistry中注册所有注解相关的后置处理器
//在给定的BeanDefinitionRegistry中注册所有相关的注解后处理器
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
/**
* Register all relevant annotation post processors in the given registry.
* 注册所有跟注解相关的后置处理器,到BeanDefinitionRegistry
* @param registry the registry to operate on
*/
public static void registerAnnotationConfigProcessors(BeanDefinitionRegistry registry) {
registerAnnotationConfigProcessors(registry, null);
}
后置处理器包括
ConfigurationClassPostProcessor、AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、EventListenerMethodProcessor、DefaultEventListenerFactory
关于这些后置处理器的作用,我们后续分析