spring启动时,tomcat加载web.xml中的context-param。在里面配置contextConfigLocation。指定spring配置文件的地址。
初始化spring的监听器。ContextLoaderListener。在监听器中初始化servletcontext。
XmlWebApplicationContext作为一个容器,实现了WebApplicationContext。并且把spring的xml配置文件中的配置信息以map的形式加载到容器中。
ContextLoaderListener继承了contextloader可以进行初始化和销毁spring的上下文。,初始化spring上下文的时候,通过反射的形式获得所有的bean,并且受spring管理的bean大部分都是单例多线程的,大量的bean信息被放到WebApplicationContext中,并且所有的资源请求可以共享,例如:sessionfactory。例如dao的实现,都是单例多线程的形式。
并且初始化了监听器,监听spring的WebApplicationContext。管理spring的各类bean
----------------------------------------------------------------------------------
默认所有的bean都是单例的。如果配置成多例,那么spring会以原型模式复制多个bean。达到多例的效果。
在单例模式下,不建议把成员变量写到bean方法里。如果写进了bean方法里。那么极有可能造成线程不安全。
在单例模式下,如果发现有成员变量,那么就用threadloacal把成员变量变成多例的。从而保护spring单例的封装