將全部對象的建立與管理任務交給Spring容器,下降程序的耦合度。web
將Spring容器注入到Web容器中。spring
使用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>
WebApplicationContext context=WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
表示層調用Service層方法從數據庫中加載對象,若是Dao層採用了延時加載,返回一個包含null對象的代理,在視圖層訪問對象的詳情時,Service層已經執行完畢,事務已關閉,對象爲空,就沒法獲取對象的詳情。ui
將Session與請求線程綁定,容許在事務關閉之後完成延時加載任務。url
在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>