spring IOC的理解


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的生命周期。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM