1. 程式人生 > 其它 >spring容器啟動-原始碼分析-AnnotationConfigApplicationContext--this()--1

spring容器啟動-原始碼分析-AnnotationConfigApplicationContext--this()--1

前段時間,通過畫腦圖記錄的方式深入分析了一下: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();就分析完了。主要是設定一些基礎的功能。後面繼續分析