应用上下文负责装载Bean的定义并把它们组装起来。应用上下文有多个实现,不同的实现区别在于加载配置的方式不同。
- ApplicationContext
为应用程序提供配置的中央接口。当应用程序运行时,这个接口是只读的,但如果实现支持的话,可以重载。
一个ApplicationContext提供了:
- 用于访问应用程序组件的Bean工厂方法。继承自ListableBeanFactory。
- 以通用方式加载文件资源的能力。继承自ResourceLoader接口。
- 将事件发布到注册的监听器的能力。继承自ApplicationEventPublisher接口。
- 解析消息的能力,支持国际化。继承自MessageSource接口。
- 从父上下文继承。下级上下文中的定义总是优先的。这意味着,例如,一个单一的父上下文可以被整个Web应用程序使用,而每个servlet有自己的子上下文,它独立于任何其他servlet的上下文。
除了标准的BeanFactory生命周期功能之外,ApplicationContext实现还可以检测和调用ApplicationContextAware beans以及ResourceLoaderAware、ApplicationEventPublisherAware和MessageSourceAware beans。
- WebApplicationContext
为web应用提供配置的接口。在应用程序运行时,这个接口是只读的,但如果实现支持的话,可以重载。
这个接口在通用ApplicationContext接口上增加了一个getServletContext()方法,并定义了一个众所周知的应用属性名,根上下文必须在引导过程中绑定到这个属性名。
与通用应用上下文一样,Web应用上下文也是分层的。每个应用程序有一个单一的根上下文,而应用程序中的每个servlet(包括MVC框架中的dispatcher servlet)都有自己的子上下文。
除了标准的应用上下文生命周期功能外,WebApplicationContext实现还需要检测ServletContextAware beans,并相应调用setServletContext方法。
-
AnnotaionConfigApplicationContext -
AnnotationConfigWebApplicationContext -
ClassPathXmlApplicationContext -
FileSystemXmlApplicationContext -
XmlWebApplicationContext