1. 程式人生 > 其它 >BeanFactory和ApplicationContext的區別

BeanFactory和ApplicationContext的區別

ApplicationContext是BeanFactory的子介面。

  BeanFactory:bean工廠介面;負責建立bean例項;容器裡面儲存的單例bean其實是一個map,它是Spring最底層的介面,只提供了簡單的容器功能(只有例項化和拿物件(手動拿)的功能,如AOP功能、Web應用等都沒有),BeanFactory在啟動的時候不會例項化Bean,只有從容器中拿Bean的時候才會去例項化

  ApplicationContext:是容器的介面;更多的負責容器介面的實現;(可以基於beanFactory建立好的物件之上完成更強大的容器)。

    容器可以從map中獲取到這個bean,並且aop、di。在ApplicationContext介面下的這些類中。

  BeanFactory最底層的介面,ApplicationContext是留給程式設計師使用的ioc容器介面,ApplicationContext是BeanFactory的介面,提供了比BeanFactory更強大的功能,與BeanFactory最大的不同就是它在應用(服務)啟動的時候就把Bean例項化完了(可以在Bean配置中使用lazy-init=true來讓Bean延遲例項化),BeanFactory只有從容器中拿Bean的時候才會去例項化。

  BeanFactory的優點(延遲例項化):啟動時資源佔用較少。缺點:後期每次使用某個功能前都需要將與該功能有關的所有bean例項化,響應時間可能會比較長

  ApplicationContext的缺點(不延遲例項化):啟動時資源佔用多,所有的bean都被例項化,優點:後期使用這些bean的時候就不需要再次例項化,直接呼叫就可以。

  使用場景:對於啟動時需要資源較多的專案可以用BeanFactory,反之用ApplicationContext,不過用的最多的應該還是ApplicationContext,畢竟ApplicationContext可能只會導致啟動的時候慢一些,而且啟動時將這些Bean都例項化了,如果有錯誤至少可以及時解決,但是如果使用BeanFactory,那使用者使用使用時,例項化某個Bean出錯了,那豈不是涼涼,而且使用者還要等你例項化完(個人理解)。

  Spring中最大的模式是工廠模式