首頁>技術>

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)

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • AdoptopenJDK 專案宣佈成為Eclipse子專案