Spring+SpringMVC重複載入配置檔案問題
阿新 • • 發佈:2018-12-31
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"/>