web环境下的ApplicationContext和无web环境的ApplicationContext的不同之处
web中的ApplicationContext从何处获得?
配置在web.xml中的ContextLoaderListener 继承自org.springframework.web.context.ContextLoader 这个类中定义了默认的AppcationContext类org.springframework.web.context.support.XmlWebApplicationContext
private static final String DEFAULT_STRATEGIES_PATH = "ContextLoader.properties";
在ContextLoader.properties放置了默认的web环境下的ApplicationContext,那么如果我么修改默认的ApplicationContext会发生什么呢?
我们在这里通过更改web.xml中的配置参数达到更改ApplicationContext类的目的。
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.context.support.ClassPathXmlApplicationContext</param-value>
</context-param>
毫不犹豫的报错:
Custom context class [org.springframework.context.support.ClassPathXmlApplicationContext] is not of type [org.springframework.web.context.ConfigurableWebApplicationContext]
在这里通过一个Adapter实现ClassPathXmlApplicationContext的适配
public class ClassPathXmlApplicationContextAdapter extends ClassPathXmlApplicationContext implements ConfigurableWebApplicationContext
同时实现其中的方法,之后再运行我们就把ClassPathXmlApplicationContext 启动了,看来二者的关键在于ConfigurableWebApplicationContext的区别,通过这个接口spring 集成了web环境,但在这个过程中遇到一个问题:始终读取不到正确的配置文件。