Spring與Web整合

一 概述

1.整合目的

將全部對象的建立與管理任務交給Spring容器,下降程序的耦合度。web

2.整合途徑

將Spring容器注入到Web容器中。spring

3.具體實現

使用ServletContextListener監聽ServletContext,當ServletContexxt建立時同時建立Spring容器,並將建立完成的容器放到ServletContext即application中,在Web中獲取Spring容器,就能夠訪問對象了。ContextLoadListener是ServletContextListener的一個實現類,配置數據庫

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

默認狀況下,Spring的配置文件只能放在WEB-INF目錄下,名稱爲applicationContext.xml,能夠在web.xml文件中修改,將配置文件放在src目錄下:app

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:xxxx.xml</param-value>
</context>

4.獲取Spring容器

WebApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());

二 延時加載問題

1.緣由

表示層調用Service層方法從數據庫中加載對象,若是Dao層採用了延時加載,返回一個包含null對象的代理,在視圖層訪問對象的詳情時,Service層已經執行完畢,事務已關閉,對象爲空,就沒法獲取對象的詳情。ui

2.解決方法

將Session與請求線程綁定,容許在事務關閉之後完成延時加載任務。url

3.具體實現

在web.xml中配置:spa

<filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>opernSessionInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
相關文章
相關標籤/搜索