`

WebWork深度探索之号外

阅读更多

        昨天开始对WebWork进行了一些初步的探索[1],虽然进展缓慢,但是在阅读与分析其源代码的时候,还是有颇多的收获。这些所得并不属于探索WebWork本身,因而将此篇列为号外。
        在ActionFactory类中,有如下代码:

public abstract class ActionProxyFactory {
  
static ActionProxyFactory factory = new DefaultActionProxyFactory();
  
public static void setFactory(ActionProxyFactory factory) {
     ActionProxyFactory.factory 
= factory;
   }

  
public static ActionProxyFactory getFactory() {
    
return factory;
   }

}

        对于类ActionProxyFactory而言,setFactory方法用于设置静态类变量factory的初始值,如果该方法没有被调用的话,那么通过getFactory方法就会获得ActionProxyFactory默认派生子类的实例。这样的设计最大的好处就是灵活,即使在整个流程当中改变了ActionProxyFactory的实现,对外的接口也是一直保持不变。
        接着,就是DefaultActionProxyFactory的代码了:

public class DefaultActionProxyFactory extends ActionProxyFactory {
    
public DefaultActionProxyFactory() {
            super();
       }

}

        DefaultActionProxyFactory的实现平淡无奇,只是构造函数的实现激起了我的兴趣,首先,ActionProxyFactory作为其父类,本身是一个Abstract的类,既然是这样,ActionProxyFactory是不允许被实例化的,那么她哪里来构造函数呢?其次,子类被实例化的时候,就是构造函数被调用的时候,默认是先调用父类默认的构造函数的(默认构造函数就是不带参数的构造函数),那么代码中的super()是不是有点多余了呢?由第二个问题引申开去,就产生了另外一个很基本的问题,如果父类中定义了包含参数的构造函数,而且是多个的时候,子类在默认情况下会调用哪一个呢?
        第一、Abstract类是拥有构造函数的,可以通过在AbstractProxyFactory中定义带参数的构造函数来证明这一点。虽然Abstract类的构造函数不能够直接通过new操作去调用,但是它可以被子类的构造函数调用。因为继承是让子类拥有跟父类一样的行为和属性,而继承很大的一部分工作都是依靠调用父类的构造函数来完成,如果父类没有构造方法,又如何实现继承呢?
        第二、我个人认为super()是多余的,因为默认的构造函数本来就会做这样的工作;
        第三、在默认情况下,哪个都不会被调用。也就是说如果父类定义了包含参数的构造函数,那么子类必须在其构造方法中显式调用父类的构造方法,否则无法编译通过。
    
         [1] WebWork深度探索之盲人摸象

分享到:
评论

相关推荐

    webwork-1.4-src.zip_webwork_webwork s_webwork.zip_webwork1.4.zip

    WebWork 是一个基于Java的开源MVC(Model-View-Controller)框架,它主要用于构建企业级的Web应用程序。WebWork1.4是该框架的一个较早版本,它为开发者提供了强大的功能,包括动作映射、数据绑定、异常处理、国际化...

    webwork之HelloWorld篇

    "webwork之HelloWorld篇"是入门WebWork框架的一个基本教程,通常包括创建一个简单的Web应用程序并展示“Hello, World!”的输出。 在Eclipse中创建一个Hello Web工程,首先你需要安装必要的插件,如JSTL和MyEclipse...

    WEBWORK

    WebWork 是一个基于 Java 的开源 MVC(Model-View-Controller)框架,它在早期的 Web 应用开发中非常流行,尤其是在 Struts 1 之前。WebWork 提供了强大的动作(Action)处理、类型转换、拦截器(Interceptor)机制...

    WebWork2.0讲解说明

    WebWork2.0是一款基于Java的企业级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,旨在简化Web应用程序的开发流程,提高代码的可维护性和可扩展性。本讲解将围绕WebWork2.0的核心概念、...

    WebWork docs 2 -- webWork 详细的说明文档

    WebWork是一个基于Java的轻量级MVC(Model-View-Controller)框架,它为构建高性能、可维护的Web应用程序提供了强大的支持。WebWork docs 2 是一套完整的WebWork框架的详细说明文档,包含了开发者在使用WebWork时...

    webWork

    WebWork是一个基于Java的开源MVC(模型-视图-控制器)框架,它在Web应用程序开发中扮演着重要角色。这个“webWork中文教程”旨在帮助...在实践中,不断探索和积累经验,将有助于提升个人在Java Web开发领域的专业素养。

    webwork.pdf

    WebWork 2.0与Spring框架的集成是另一个重要的方面,Spring作为Java领域最流行的依赖注入框架之一,其与WebWork的结合能够进一步增强应用的模块化和灵活性。通过Spring的依赖注入功能,可以更方便地管理和配置...

    webwork的jar包

    WebWork 是一个基于Java的MVC(模型-视图-控制器)框架,它在Web应用程序开发中被广泛使用。WebWork 1 和 WebWork 2 都是该框架的不同版本,每个版本都有其特性和改进。 WebWork 1 是早期的版本,提供了基础的MVC...

    webwork

    WebWork 是一个开源的、基于Java的Web应用程序框架,它专为构建动态、交互式的Web应用而设计。这个框架的核心理念是模型-视图-控制器(MVC)架构模式,帮助开发者将业务逻辑、用户界面和数据管理分离开来,从而提高...

    webwork_框架文档

    WebWork是一个基于Java的MVC(Model-View-Controller)框架,它在早期的Web开发中扮演了重要的角色,尤其是在Struts之前或作为其替代品出现。WebWork提供了许多先进的特性,如动作拦截器、类型转换、强大的异常处理...

    webwork2开发指南

    WebWork2是一款基于Java的MVC(Model-View-Controller)框架,用于构建Web应用程序。在Web开发领域,它提供了一种结构化和模块化的开发方式,帮助开发者更高效地组织代码并实现业务逻辑。本指南将深入探讨WebWork2的...

    Webwork2开发指南

    **Webwork2 开发指南** Webwork2 是一个基于Java的开源MVC(Model-View-Controller)框架,专门用于构建动态、交互式的Web应用程序。它提供了强大的数据绑定、动作控制、异常处理以及国际化等功能,使得开发者能够...

    webwork源码底层实现

    WebWork是一个古老的Java Web开发框架,它在早期的MVC(模型-视图-控制器)架构中占有重要地位,为开发者提供了丰富的功能和强大的动作映射能力。在深入理解WebWork源码之前,我们首先需要了解一些基本概念。 1. **...

    WEBWORK的源文件压缩包

    WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包WEBWORK的源文件压缩包

    webwork2中文教程

    WebWork2是一个基于Java的轻量级Web应用框架,它为开发者提供了构建高效、可维护的Web应用程序的强大工具。在本教程中,我们将深入...无论你是初学者还是有经验的开发者,本教程都将是你探索WebWork2世界的理想指南。

    WebWork教程开发资料

    **WebWork教程开发资料** WebWork是一个基于Java的MVC(模型-视图-控制器)框架,用于构建Web应用程序。本教程是针对WebWork 0.90版本的初稿,涵盖了大部分章节,但未包括"实战G-Roller-WW"和"WebWork与其它开源...

    webWork2开发指南

    WebWork2是一款基于Java的轻量级Web应用框架,它为开发者提供了强大的MVC(Model-View-Controller)架构支持,使得构建动态、数据驱动的Web应用变得更加简单和高效。这款框架在2000年代中期较为流行,是Struts的一个...

Global site tag (gtag.js) - Google Analytics