ssm框架整合時一直報出沒有創建實例bean的錯誤,一直以為是代碼原因,反復測試了很久,才找到原因是spring配置文件沒有正確導入,下圖是我的錯誤示例
web.xml加載spring配置文件的方式主要依據該配置文件的名稱和存放的位置不同來區別,目前主要有兩種方式。
1.如果spring配置文件的名稱為applicationContext.xml,並且存放在WEB-INF/目錄下,那么只需要在web.xml中加入以下代碼即可
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
該監聽器會自動掃描WEB-INF/ 下的applicationContext.xrnl 文件,這種方式多數用在只有一個配置文件的情況下。
還可以使用Spring的ContextLoaderServlet的這個特殊Servlet,實現代碼如下
<servlet> <servlet-name>context</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-name>
<load-on-startup>1(比較小的數字就可以)</load-on-startup>
</servlet>
上面的兩種方式都可以,不過二者有一些區別。
2.如果spring配置文件的名稱是自定義的其他名稱(我使用的就是自定義名稱),比如為applicationContext-test.xml,也還是存放在WEB-INF/目錄下,那么還需要配置contextConfigLocation這個參數,該參數是一個字符串,監聽器或者Servlet會自定將該字符串按照特定的字符(比如空格、逗號、分號)解析成多個文件。需要添加如下代碼:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/application-testA.xml,/WEB-INF/application-testB.xml,/WEB-INF/application-testB.xml</param-value> </context-param>
如果上面嫌得麻煩,可以使用通配符對上面進行簡寫如下
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/application*.xml</param-value> </context-param>
然后再加入以上的監聽器或者servlet代碼就可以。
3.如果既沒有applicationContext.xml 文件,也沒有使用contextConfigLocation參數確定配置文件,或者contextConfigLocation確定的配置文件不存在。都將導致Spring 無法加載配置文件或無法正常創建ApplicationContext 實例.
正確示例如下圖,加入了Spring監聽器,從而才能正確加載Spring配置文件
參考:http://www.cnblogs.com/zjhs/archive/2012/10/26/2741228.html