相同:
1.Spring提供了两种IOC的容器,一个是beanFactory,一个是ApplicationContext。他们都是java接口,
ApplicationContext implement BeanFactory extends ListableBeanFactory
2.他们都可以用来配置XML属性,也支持属性的自动注入。
3.BeanFactory和ApplicationContext 都提供了一种获取bean的方式,getBean(“beanName”)。
不同:
1.实例化时机不同,BeanFactory是调用getBean是实例化,而ApplicationContext 是在容器启动的时候就实例化单例bean(除非显示标注prototype)
2.BeanFactory不支持国际化,ApplicationContext 支持
3.ApplicationContext能够实现监听器并注入到Spring容器中
实现: a. ApplicationContext.publishEvent(继承ApplicationEvent的对象)发布通知
b.定义监听类 implements ApplicationListener<事件类>;
c.applicationContext.xml:中配置bean
d.调用@Service类的方法(通过@ContextConfiguration配置xml路径,@Autowired来注入,调用方法)
4.BeanFactory的一个核心实现是XMLBeanFactory,而ApplicationContext的一个核心实现是ClassPathXmlApplicationContext
在SpringMVC中得到的容器都叫WebApplicationContext,里面有getServletContext方法,从而使用servletcontext接口的一些方法
5.如果使用自动注入并使用BeanFactory,需要使用API注册AutowiredBeanPostProcessor(@Autowired),
如果使用ApplicationContext,则需要使用xml来配置
总结:BeanFactory提供的基本的IOC和DI的功能,而ApplicationContext对其进行了扩展,实现了更高级的功能(国际化,事件监听,底层资源访问加载多个Resource)。