天天看點

spring源碼閱讀(1)- ioc依賴注入之"helloworld"

public static void main(String[] args){
        ClassPathResource classPathResource = new ClassPathResource("iocarch/beanlifecycle2/springcontext.xml");
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        XmlBeanDefinitionReader builder = new XmlBeanDefinitionReader(beanFactory);
        builder.loadBeanDefinitions(classPathResource);

        User user = (User) beanFactory.getBean("user");
    }
           

上面這段程式我們可以看成spring容器的ioc子產品的hello world,下面分别從宏觀和微觀兩個面去說明上面的程式。

首先我們應該要了解IOC容器是用來做什麼的(不知道的還是先從功能使用上了解IOC容器,不要直接在懵懵懂懂的了解形勢下來看源碼),先看下圖-摘自精通spring4.x

spring源碼閱讀(1)- ioc依賴注入之"helloworld"

1、IOC容器從xml配置、@Configuration注解的類等讀取配置的bean資訊,在容器中通過beanDefinition表述,容器維護一個beanDefinition注冊清單,

2、容器根據beanDefinition清單執行個體化對應的Bean對象,将需要管理的執行個體緩存到容器的池中。

3、應用從容器擷取bean,容器從緩存中擷取一個或者執行個體化一個。

這三點極盡簡單的說明了IOC依賴注入的原理和功能:類的執行個體化管理由spring實作,從此應用從類的執行個體化配置代碼中解放,直接從spring中拿來用就ok了。

1、資源

ClassPathResource classPathResource = new ClassPathResource("iocarch/beanlifecycle2/springcontext.xml")
           

這段代碼是配置bean執行個體化方式的xml檔案資源的擷取,這個點不深入了我們隻要知道是到對應的路徑擷取到檔案就行了。

2、工廠

DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
           
DefaultListableBeanFactory:這個是整個bean加載的核心,這個類根據生成了的BeanDefinition清單根據不同的定義對bean進行對應的加載和管理。      

3、讀取配置

XmlBeanDefinitionReader builder = new XmlBeanDefinitionReader(beanFactory);
           

該部分主要處理的是xml配置的bean資訊,生成BeanDefinition清單。

本章我們通過一小段代碼引入IOC實作中的三大功能子產品,其中資源部分沒有打算深入剖析,接下來我們會順着讀取資源配置->執行個體化bean管理的路線進行展開深入剖析。

溫馨提示:展開的讀我這裡也會做到點到即止,我們的目标是了解脈絡,不是來學習程式設計和代碼設計的。

繼續閱讀