[面試原題]web
ApplicationContext和BeanFactory的區別面試
[正確答案]框架
1.若是使用ApplicationContext,則配置的bean若是是singleton無論你用仍是不用,都被實例化。好處是能夠預先加載,壞處是浪費內存。它也能夠爲Bean配置lazy-init=true來讓Bean延遲實例化。code
2.BeanFactory,當使用BeanFactory實例化對象時,配置的bean不會立刻被實例化。當你使用該bean時纔會被實例化(getBean)。好處是節約內存,缺點是速度比較慢。多用於移動設備的開發上。xml
3.通常沒有特殊要求,應當使用ApplicationContext完成。對象
[面試技術點]繼承
Spring Bean初始化的方法。接口
[解讀]事件
1. 從ApplicationContext中取bean 內存
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
當咱們實例化bean.xml時,該文件中配置的bean都會被實例化。(該bean scope是singleton)
2. 從BeanFactory中取bean
BeanFactory factory= new XmlBeanFactory(new ClassPathResource("bean.xml"));
factory.getBean("boweifeng"); //取bean的時候纔會實例化
當使用beanfactory去獲取bean,當你只是實例化該容器,那麼容器內的bean不會被實例化,只有當使用某個bean(getBean)時,如:factory.getBean("boweifeng"),纔會實時去實例化該bean。
[擴展]
ApplicationContext接口,它由BeanFactory接口派生而來,於是提供BeanFactory全部的功能。ApplicationContext以一種更向面向框架的方式工做以及對上下文進行分層和實現繼承,ApplicationContext包還提供瞭如下的功能:
• MessageSource, 提供國際化的消息訪問
• 資源訪問,如URL和文件
• 事件傳播
• AOP的功能
三種獲取ApplicationContext對象引用的方法
1. ClassPathXmlApplicationContext 經過類路徑。
2. FileSystemXmlApplicationContext 經過文件路徑。
ApplicationContext ac = FileSystemXmlApplicationContext("d:\\com\\bean.xml");
3. XmlWebApplicationContext:從web系統中加載。