1.什么是spring IOC
IOC(Inversion of Control)即控制反轉,在我們以往的編程中如果需要一個bean往往需要去手動去new一個出來。而spring幫我們解決了這個問題,在spring中我們只需要去定義bean,spring就會自動的幫我們實例化並管理Bean。而這些Bean就管理在spring容器中。
2.什么是spring 容器
相信在此之前各位小伙伴也看過一些spring容器先關的介紹,感覺很高端有沒有....竟然可以自動的管理Bean。其實spring容器只是有若干的Map組成的。
3.與spring容器相關的組件:
(1). BeanDefinition(Bean的定義)
舉個例子:
①首先我們定義一個User類,並在xml文件中配置:


②啟動Bean容器我們看看BeanDefinition中有什么

我們發現在xml文件中配置的屬性與BeanDefinition相同,因此在spring中BeanDefinition用來表示我們配置的一個個<bean/>
(2)BeanDefinitionRegistry(用來注冊BeanDefinition的容器),這是一個接口,其實現類為DefaultListableBeanFactory。

我們來看看DefaultListableBeanFactory的源碼:
①其內含有一個ConcurrentHashMap用來存儲Bean的定義
/** Map of bean definition objects, keyed by bean name */ private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256);
②registerBeanDefinition方法用來講我們的BeanDefinition注冊到DefaultListableBeanFactory中
@Override public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException {
(3)DefaultSingletonBeanRegistry:用來管理我們的單例Bean
/** Cache of singleton objects: bean name --> bean instance */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256); //用來存儲完成的Bean實例
4.總結
所以我們一般所指的spring容器包括三個Map,其中DefaultListableBeanFactory中的map用來管理我們的BeanDefinition,而DefaultSingletonBeanRegistry中的map用來管理我們的單例Bean。
這里只是介紹下對於spring IOC以及spring容器的理解,具體的流程參考bean的生命周期。