二. 註冊當前的配置類信息——->this.register(annotatedClasses);
- 就一行代碼,通過上面初始化的註解reader註冊配置類的bean定義信息。
this.reader.register(annotatedClasses);
通過遍歷所有的配置類,進行註冊
for(int var4 = 0; var4 < var3; ++var4) {
Class<?> annotatedClass = var2[var4];
this.registerBean(annotatedClass);
}
- registerBean(annotatedClass),註冊註解配置類
public void registerBean(Class<?> annotatedClass, String name, Class<? extends Annotation>... qualifiers) {
AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(annotatedClass); // 構造BeanDefinition類
if (!this.conditionEvaluator.shouldSkip(abd.getMetadata())) { // 判斷是否需要跳過,主要是判斷類上面是否有condition,並且condition是否成立
ScopeMetadata scopeMetadata = this.scopeMetadataResolver.resolveScopeMetadata(abd);
abd.setScope(scopeMetadata.getScopeName());
String beanName = name != null ? name : this.beanNameGenerator.generateBeanName(abd, this.registry);
AnnotationConfigUtils.processCommonDefinitionAnnotations(abd);
if (qualifiers != null) {
Class[] var7 = qualifiers;
int var8 = qualifiers.length;
for(int var9 = 0; var9 < var8; ++var9) {
Class<? extends Annotation> qualifier = var7[var9];
if (Primary.class == qualifier) {
abd.setPrimary(true); // 設置primary屬性
} else if (Lazy.class == qualifier) {
abd.setLazyInit(true); // 設置懶加載屬性
} else {
abd.addQualifier(new AutowireCandidateQualifier(qualifier)); // 設置qualifier屬性
}
}
}
BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(abd, beanName);
definitionHolder = AnnotationConfigUtils.applyScopedProxyMode(scopeMetadata, definitionHolder, this.registry);
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry); // 註冊bean定義,這個時候還是沒有實例化bean
}
}
以上流程中都沒有實例化bean,全部都是bean定義