• Spring与Web框架(例如Spring MVC)漫谈——关于Spring对于多个Web框架的支持


      在看Spring MVC的官方文档时,最后一章是关于Spring对于其它Web框架的支持(如JSF,Apache Struts 2.x,Tapestry 5.x),当然Spring自己的MVC框架Spring MVC就不用多说了。

      这里并不想讨论其它的Web框架,而是记录下这章开头提到的关于Spring为何还要支持其它Web框架。

      Spring Framwork的一个核心价值观是:允许开发者自由选择。

      一般而言,Spring并不会强迫你使用或者购买某些特别的架构、技术或者方案,尽管它们肯定会特别推荐一些。

      尽管Spring自己也提供了一个Web框架,即Spring MVC,但是选择这些技术方案的自由取决于开发者以及他们的团队。

      所以Spring仍然提供了对多个其它Web框架的集成与支持。

      不论是选择什么样的Web框架,都需要对Spring进行通用的配置。

      Spring的轻量级应用模型所信奉的理念是:软件架构需要分层。

      而在“经典”分层体系结构中,web层只是众多层中的一个。它作为服务端程序的一个入口点,将处理委托给业务逻辑层中的对象(Service objects),进行特定的业务处理。

      在Spring中, service objects,或者business-specific objects、data-access objects或其它,这些都存在与不同的业务上下文中(business context,不包含web或者表示层对象。表示层对象,例如Spring MVC controllers,通常在不同的“表示上下文(presentation context)”中配置)。

      这一章的目的,就是详细介绍如何配置一个Spring容器(一个WebApplicationContext),然后在这个容器中包含你的应用中所有的business beans。

      你所需要做得是,在Web项目的web.xml中声明一个ContextLoaderListener的<listen/>元素,并为它添加<context-param/> 元素,以指定Spring的XML配置文件的加载位置,如下:

    <listener>
        <listenerclass>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext*.xml</param-value>
    </context-param>

      如果没有指定XML配置文件,ContextLoaderListener会自动寻找“/WEB-INF/applicationContext.xml”来加载。

      一旦加载完成,Spring便创造了一个基于applicationContext.xml中相关bean定义的WebApplicationContext 对象实例,并把这个实例存储在Web应用的ServletContext中。(一个Web应用只有一个ServletContext)。

      所有的Java Web框架都基于 Servlet API,所以都可以通过以下方式访问这个由ContextLoaderListener创建的,包含“business context”的ApplicationContext:

    WebApplicationContext ctx =  WebApplicationContextUtils.getWebApplicationContext(servletContext);    

      WebApplicationContextUtils类是为了方便起见,以便不需要记住ServletContext中对应的属性名。而如果WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE键下不存在对象,则其getWebApplicationContext()方法返回null。

      为了免去在应用程序中获取NullPointerExceptions的风险,最好使用getRequiredWebApplicationContext()方法。 当ApplicationContext丢失时,此方法抛出异常。

      一旦你有了对WebApplicationContext对象的引用,你就可以根据bean的名称或类型检索它们。大多数开发人员按名称检索bean,然后将它们转换为一个其实现的接口。

      而且Web框架都提供了简易的方式查找bean,他们不仅可以方便地从Spring的容器中获取bean,还允许你在它们的Controller上进行依赖注入。

  • 相关阅读:
    10000000000
    vue生命周期
    react基础
    第一个react
    vuex状态管理2
    vue配合UI组件
    vuex
    vue-router配合vue-cli的实例
    vue-router2.0
    父子组件2.0
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/10159751.html
Copyright © 2020-2023  润新知