通過上下文獲取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