类结构图:
public interface ApplicationContext extends ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver
定义
ApplicationContext:提供了应用程序上下文信息。程序运行时是只读的,但可以被重新加载(如果支持的话)。
context包的核心是ApplicationContext
接口。它由BeanFactory
接口派生而来,因而提供了BeanFactory
所有的功能。为了以一种更面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext
提供了以下的功能:
ListableBeanFactory
。ResourceLoader
接口的子接口ResourcePatternResolver。ApplicationEventPublisher
接口。MessageSource
接口。 ApplicationContext包括BeanFactory的全部功能,因此建议优先使用ApplicationContext。除非对于某些内存非常关键的应用,才考虑使用 BeanFactory。
获取方式
很多时候, ApplicationContext 允许以声明式方式操作容器,无须手动创建。可利用如 ContextLoader 的支持类,在 Web 应用启动时自动创建 ApplicationContext。当然,也可以采用编程方式创建 ApplicationContext。
声明式:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/*.xml</param-value> </context-param>
编程式:
spring为ApplicationContext提供的3种实现:
ClassPathXmlApplicationContext FileSystemXmlApplicationContext XmlWebApplicationContext(为web应用订制)
1、ClassPathXmlApplicationContext
//eg1.加载单个配置 ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml"); //eg2.加载多个配置 String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"}; ApplicationContext ctx2 = new ClassPathXmlApplicationContext(locations);
2、FileSystemXmlApplicationContext
//eg1.加载单个配置文件(通过文件系统从相对于当前工作目录中载入) ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml"); //eg2.加载多个配置文件(通过文件系统从相对于当前工作目录中载入) String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"}; ApplicationContext ctx2 = new FileSystemXmlApplicationContext(locations ); //eg3. 加载单个配置文件(根据具体路径加载文件) ApplicationContext ctx3 =new FileSystemXmlApplicationContext("D:/project/bean.xml");
3、XmlWebApplicationContext
ServletContext servletContext = request.getSession().getServletContext(); ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
总结: