📜  Spring MVC 中的 WebApplicationContext(1)

📅  最后修改于: 2023-12-03 15:20:13.236000             🧑  作者: Mango

Spring MVC 中的 WebApplicationContext

在 Spring MVC 中,WebApplicationContext 是一个用于 Web 应用程序的特殊应用程序上下文。它与普通的应用程序上下文不同之处在于,它包含了针对 Web 应用程序的特殊 Bean。

WebApplicationContext 的创建

WebApplicationContext 可以通过 XmlWebApplicationContextAnnotationConfigWebApplicationContext 类来创建。XmlWebApplicationContext 可以用来加载 XML 格式的配置文件,而 AnnotationConfigWebApplicationContext 可以用来加载基于 Java 类的配置。

以下是使用 XmlWebApplicationContext 创建 WebApplicationContext 的示例代码:

/* web.xml */

<web-app>
  <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>
  
  <!-- other configuration -->
</web-app>
// Java config

XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocation("/WEB-INF/applicationContext.xml");
context.refresh();

但通常情况下,我们使用 ContextLoaderListener 监听器来加载 WebApplicationContext。这个监听器会在 Web 应用程序启动时自动创建 WebApplicationContext,并将其作为 ServletContext 的属性存储起来。我们可以通过 ServletContext 来获得这个 WebApplicationContext。

以下是使用 ContextLoaderListener 创建 WebApplicationContext 的示例代码:

/* web.xml */

<web-app>
  <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>
  
  <!-- other configuration -->
</web-app>
// Java code

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
WebApplicationContext 的使用

使用 WebApplicationContext 最常见的方式就是通过 @Autowired@Inject 注解注入需要的 Bean。默认情况下,WebApplicationContext 中的 Bean 都是单例的。如果需要使用 Request 或 Session 范围的 Bean,则需要在 Bean 上使用 @RequestScope@SessionScope 注解。

以下是使用 @Autowired 注入 Bean 的示例代码:

@Controller
public class MyController {
  
  @Autowired
  private MyService myService;
  
  // ...
}
总结

WebApplicationContext 是 Spring MVC 中用于 Web 应用程序的特殊应用程序上下文,它包含了针对 Web 应用程序的特殊 Bean。我们可以使用 XmlWebApplicationContextAnnotationConfigWebApplicationContext 来创建,也可以通过 ContextLoaderListener 监听器来创建。使用 WebApplicationContext 最常见的方式是通过 @Autowired@Inject 注解注入需要的 Bean。