1. 程式人生 > >通過上下文獲取bean和通過bean工廠獲取bean

通過上下文獲取bean和通過bean工廠獲取bean

 從ApplicationContex 應用上下文容器中獲取bean和從bean工廠容器中獲取bean

 定義一個Student的類,裡面含有一個無參的構造方法,然後配置該bean

1.從ApplicationContext中取bean

ApplicationContextac=new ClassPathXmlApplicationContext("com/hsp/ioc/beans.xml");(控制檯輸出無參構造方法中的內容)

//當我們去例項化beans.xml,該檔案中配置的bean被例項(該bean 作用域是 singleton,如果bean的作用域是prototype則會放棄預先載入)從bean中取出student

注:prototype的話 一個bean定義對應多個物件例項,此時容器將不確定到底載入多少個,只能放棄預先載入

2.如果我們使用beanfactory去獲取bean,當你只是例項化該容器, 那麼

/容器的bean不被例項化,只有當你去使用getBean某個bean時,才會實時的建立.

BeanFactory   factory = new XmlBeanFactory(newClassPathResource("com/hsp/ioc/beans.xml"));(此時不會輸出)

              factory.getBean("student");(執行到這裡才會輸出構造方法中的內容)

結論:

1.如果使用ApplicationContext ,則配置的bean如果是 singlton不管你用不用,都被例項化.(好處就是可以預先載入,缺點就是耗記憶體)

2.如果是 BeanFactory ,則當你獲取beanfacotry時候,配置的bean不會被馬上例項化,當你使用的時候,才被例項(好處節約記憶體,缺點就是速度)

3.一般是使用ApplicatioContext完成,因為現在記憶體比較便宜,除非真的是記憶體有限,需要節約使用

其他還有幾種獲取bean的方式:

3.繼承自抽象類ApplicationObjectSupport 
4.繼承自抽象類WebApplicationObjectSupport 
5.實現介面ApplicationContextAware 
6.通過Spring提供的ContextLoader