首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web 中獲取 Spring ApplicationContext 的標準姿勢:WebApplicationContextUtils 詳解

     編輯:Java 相關知識

核心工具類

org.springframework.web.context.support.WebApplicationContextUtils 提供靜態方法從 ServletContext 獲取 Spring 根上下文:

ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

Spring 2.5 + Struts 2 環境配置

web.xml 關鍵配置

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

ContextLoaderListener 啟動時初始化根 ApplicationContext 並綁定到 ServletContext。

各層獲取方式

JSP 頁面

<%@ page import="org.springframework.context.ApplicationContext" %>
<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
<%
  ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
  TestService service = (TestService) ctx.getBean("testService");
  out.print(service.test());
%>

Servlet / Filter / Listener

ServletContext sc = getServletContext(); // 或 filterConfig.getServletContext()
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(sc);

Struts 2 Action

public class MyAction extends ActionSupport implements ServletContextAware {
    private ServletContext servletContext;
    public void setServletContext(ServletContext sc) { this.servletContext = sc; }

    public String execute() {
        ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
        // ...
    }
}

純 Spring + JSP 環境

web.xml 僅保留 ContextLoaderListener 與 DispatcherServlet,獲取方式完全相同。

最佳實踐提醒

  • 優先使用**依賴注入**(構造器/Setter/@Autowired)而非主動查找
  • 僅在無法注入的舊代碼、工具類、第三方框架集成點使用 WebApplicationContextUtils
  • Spring 3.0+ 可用 WebApplicationContextUtils.getRequiredWebApplicationContext() 失快速失敗
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved