BeanFactory的初始化:
配置xx.xml,通过BeanFactory启动IoC容器时,并不会初始化配置文件中定义的Bean,初始化动作会发生在第一个调用时。
ApplicationContext的初始化:
在初始化应用上下文的时候就实例化所有单实例Bean,因此ApplicationContext的初始化时间会比BeanFactory长一些。
WebApplicationContext的初始化:
他的初始化需要Servlet实例,即必须在拥有web容器的前提下才能完成启动工作。
解决方法二选一:
1.在web.xml中配置自启动servlet
2.定义web容器监听器(ServletContextListner)
WebApplicationContext
1.指定配置文件
ContextLoaderListener通过容器上下文参数contextConfigLocation获取Spring配置文件的位置
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:config/applicationContext.xml,classpath:config/spring-*.xml
</param-value>
</context-param>
2.声明web容器监听
使用ContextLoaderListener启动WenApplicationContext的具体配置
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
3.需要配置日志功能
可以将log4j的配置文件放在类路径WEB-INF/classes下,这是log4j引擎即可顺利启动。
如果放在别的位置,就要在web.xml中指定log4j的位置。(p101)
Spring的Log4jConfigServlet和Log4jConfigListener,能保证在装载spring配置文件前先装载log4j的配置信息。
如果使用web监听,则必须将Log4jConfigListener放置在ContextLoaderListener前面
顺序:
log4jConfigServlet > SpringContextLoaderServlet