spring與springmvc整合
在專案中使用springmvc的時候,由於spring和springmvc是同源的,有時候大家會把所有的配置都扔到springmvc的配置檔案中,而不去區分spring和springmvc的配置,而我習慣於把兩個配置拆分開來,spring來配置資料來源、事務以及和其他框架的整合,springmvc來配置web相關的一些配置。
在這裡給大家說明一下兩者配置整合時可能會遇到的一些問題
之前在 web應用使用spring 一節中說過如何在web應用中載入spring容器,使用的是是監聽器,這裡就不贅述了,可以去搜一下之前的文章
重複建立bean當springmvc的配置檔案和spring的配置檔案分離的時候,由於現在使用註解的比較多,大多都是用元件掃描,
如果兩個配置檔案都使用來進行元件掃描的話,會導致兩個配置檔案都掃一遍這些元件,這些bean都會建立兩次
這時候就用到了<context:exclude-filter>和<context:include-filter>來進行設定過濾了
springmvc只需要管控制器Controller就可以了,所以在springmvc的配置檔案中配置
<context:component-scan base-package="com.zhanghe.study.springmvc" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>
而spring的配置檔案中只需要相應的排除掉springmvc掃描的
<context:component-scan base-package="com.zhanghe.study.springmvc"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan>
容器關係springmvc容器是spring容器的子容器,springmvc容器可以訪問spring容器中的bean,反之則不行
獲取spring容器上下文在專案啟動的時候,監聽器中會在web應用環境初始化的時候將spring的上下文內容存在應用上下文中
servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);
所以在取出來時只需要獲取到應用上下文
req.getServletContext()
然後取出來即可
context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)
最新評論