spring容器啟動-原始碼分析-AnnotationConfigApplicationContext--this()--1
阿新 • • 發佈:2021-06-21
前段時間,通過畫腦圖記錄的方式深入分析了一下:spring底層容器的重新整理過程,現在拆分為部落格,分享一下。後面會附上腦圖的原檔案,供大家檢視。
public class BeanAutowired { public static void main(String[] args) { ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanConfig.class); String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { System.out.println(beanDefinitionName); } } }
這個是程式碼入口,基於spring Initalizr,新建一個springboot專案就好。sping會自動引入,相關jar。
重要前言:本原始碼分析,限於:基於註解的容器重新整理,和spingboot沒有關係,屬於最底層的ioc容器重新整理過程。後續,有時間,再寫基於springboot的原始碼分析。
進入原始碼AnnotationConfigApplicationContext,構造器
public AnnotationConfigApplicationContext(Class<?>... componentClasses) { this();//AnnotationConfigApplicationContext容器無參構造器;======父級GenericApplicationContext();無參構造器。建立this.beanFactory = new DefaultListableBeanFactory(); register(componentClasses);//註冊相關資訊 refresh();//重新整理容器。核心 }
進入this();
進入this.reader = new AnnotatedBeanDefinitionReader(this);
進入:this.conditionEvaluator = new ConditionEvaluator(registry, environment, null); 配置基本的環境資訊
進入:AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);註冊各個註解模式需要的後置處理器, 預設工廠也是在這裡設定的
進入:
this.scanner = new ClassPathBeanDefinitionScanner(this);指定bean定義掃描器,@Component註解的支援,就是在這裡設定的。
至此,AnnotationConfigApplicationContext原始碼的第二行:this();就分析完了。主要是設定一些基礎的功能。後面繼續分析