ContextLoaderListener監(jiān)聽器的作用就是啟動Web容器時匈庭,自動裝配ApplicationContext的配置信息庐扫。因為它實現(xiàn)了ServletContextListener這個接口,在web.xml配置這個監(jiān)聽器曙砂,啟動容器時埋凯,就會默認執(zhí)行它實現(xiàn)的方法脆诉。至于ApplicationContext.xml這個配置文件部署在哪,如何配置多個xml文件伐坏,書上都沒怎么詳細說明≌唬現(xiàn)在的方法就是查看它的API文檔。在ContextLoaderListener中關聯(lián)了ContextLoader這個類桦沉,所以整個加載配置過程由ContextLoader來完成每瞒。看看它的API說明纯露。
第一段說明ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成剿骨。如果查看ContextLoaderServlet的API,可以看到它也關聯(lián)了ContextLoader這個類而且它實現(xiàn)了HttpServlet這個接口埠褪。
第二段懦砂,ContextLoader創(chuàng)建的是 XmlWebApplicationContext這樣一個類,它實現(xiàn)的接口是WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory這樣一來spring中的所有bean都由這個類來創(chuàng)建
第三段,講如何部署applicationContext的xml文件组橄。
如果在web.xml中不寫任何參數配置信息荞膘,默認的路徑是/WEB-INF/applicationContext.xml,在WEB-INF目錄下創(chuàng)建的xml文件的名稱必須是applicationContext.xml玉工;
如果是要自定義文件名可以在web.xml里加入contextConfigLocation這個context參數:
contextConfigLocation
/WEB-INF/classes/applicationContext-*.xml
在 里指定相應的xml文件名羽资,如果有多個xml文件,可以寫在一起并一“,”號分隔遵班。上面的applicationContext-*.xml采用通配符屠升,比如這那個目錄下有applicationContext-ibatis-base.xml,applicationContext-action.xml狭郑,applicationContext-ibatis-dao.xml等文件腹暖,都會一同被載入。
由此可見applicationContext.xml的文件位置就可以有兩種默認實現(xiàn):
第一種:直接將之放到/WEB-INF下翰萨,之在web.xml中聲明一個listener脏答;
第二種:將之放到classpath下,但是此時要在web.xml中加入,用它來指明你的applicationContext.xml的位置以供web容器來加載殖告。按照Struts2 整合spring的官方給出的檔案阿蝶,寫成:
contextConfigLocation
/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml