一、加载bean时机不同
ApplicationContext是一次性立刻加载,比较消耗资源但是后续读取非常快,会将spring中所有的bean进行初始化,全部实例化到spring中!!属于饿汉模式加载。
Beanfactory是一个用来管理bean对象的工厂,加载bean的时候不会立刻一次性加载,使用的是惰性加载,只有执行调用get bean方法才会加载对应的bean。
二、功能不同
Spring有两个顶级接口,BeanFactory和ApplicationContext接口,其中BeanFactory提供了基础的访问容器的能力,而ApplicationContext属于BeanFactory的子接口,除了实现了BeanFactory接口之外,还增强了自己的功能,支持国际化资源绑定、和消息处理事件发布和监听、AOP(面向切面编程)、支持Web应用程序
ApplicationContext接口是通过多态方式获取spring上下文,然后获取上下文里面bean id配置的bean对象。
-
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
三、资源消耗不同
由于BeanFactory是延迟初始化的,因此在应用程序运行时,它只会实例化被访问的bean,因此它的资源消耗较少。而ApplicationContext在启动时就会实例化所有的bean,因此它的资源消耗较大。