1. 程式人生 > >Spring+SpringMVC重複載入配置檔案問題

Spring+SpringMVC重複載入配置檔案問題

sping+springmvc的框架中,IOC容器的載入過程

http://my.oschina.net/xianggao/blog/596476

基本上是先載入ContextLoaderListener,然後生成一個ioc容器。

然後再例項化DispatchServlet時候在載入對應的配置檔案,再次生成Controller相關的IOC容器

關於上面兩個容器關係:

ContextLoaderListener中建立ApplicationContext主要用於整個Web應用程式需要共享的一些元件,比如DAO,資料庫的ConnectionFactory等。而由DispatcherServlet建立的ApplicationContext主要用於和該Servlet相關的一些元件,比如Controller、ViewResovler等。

對於作用範圍而言,在DispatcherServlet中可以引用由ContextLoaderListener所建立的ApplicationContext,而反過來不行。

於是,如果對於這兩份配置沒有很好的認識,就會發生重複載入配置檔案,導致bean被多次載入的問題:

http://my.oschina.net/xianggao/blog/522267#OSC_h1_4

總結:

1、通過配置exclude-filter來避免重複載入的問題

 <context:component-scan base-package="com.projects.system">
     <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"
/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan>
2、分開掃描,養成良好習慣:

DispatchServlet.xml        <context:component-scan base-package="xx.xx.xx.controller" />

applicationContext.xml   <context:component-scan base-package="xx.xxx.xx.dao,xx.xx.xxx.service"/>