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
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管理的路線進行展開深入剖析。
溫馨提示:展開的讀我這裡也會做到點到即止,我們的目标是了解脈絡,不是來學習程式設計和代碼設計的。