IOC(二). IOC容器初始化過程 -> this.register(annotatedClasses);

二. 註冊當前的配置類信息——->this.register(annotatedClasses);

  1. 就一行代碼,通過上面初始化的註解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定義

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章