Struts2技术内幕 读书笔记一 框架的本质

时间:2022-09-26 17:32:32

本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书。笔记中所用的图片若无特殊说明,就都取自书中,特此声明。



什么是框架?我们为什么要用框架?框架能给我们带来什么?

这几个问题既简单又复杂。说它简单,是因为框架确实存在在软件设计中,说它复杂是因为我们现在所使用的框架不论是spring还是struts都是经过多年的发展,其内部已经十分庞杂了,因此想一句话两句话说清楚一个框架就不是那么简单了。

OK,既然现有的框架都很复杂,那我们就找一个简单的:

if(str==null || str.length()==0){
    //...你的逻辑
}

上面这段代码,无论是语法还是功能都很简单:判断一个字符串是否为空。

我们仔细回想一下,我们所写的java代码首先就得得到java的语法支持和基本功能的api支持(例如上面的str.length()就是返回字符串的长度)。再换句话说我们所写的代码都依赖一个最最基本的条件:

jdk所提供的api支持***

如果一个需求被重复1000次,那么我们就需要重复1000次针对需求的解决方法。如果一个项目里我们有1000个地方都需要判断字符串是否为空,当然上面的代码完全可以,不过我们是不是能够对它做一点点重构呢?

public abstract class StringUtils{
    public static boolean isEmpty(String str){
        return str.length()==0 || str==null;
    }
}

在我们的代码里要使用上面的功能,代码如下:

if(StringUtils.isEmpty(str)){
    //...你的逻辑
}

我们对代码做了一次小小的改进,可就是这个改进,让我们的代码有了两个良好的品质:

1 可读性

只要是学过英语的朋友,应该都知道empty的意思吧。对"判断字符串是否为空"这个功能点,我们抽象出一个方法,名字就叫做isEmpty,不就是见名知义吗?相信一些有经验的程序员看到isEmpty的方法名就能想到内部的实现过程。我们再看看未重构前的代码,如果在一个七八百行的代码片段里,我们最初写的那部分代码是不能引起我们思维的停顿的。而后者作为一个提炼出来的方法,可以给我们一个直观的提示。

2 可扩展性

这个就更简单了,如果对"判断字符串是否为空"这个功能点做一下改变,之前的方法需要改1000次,而抽取出逻辑合成一个新的方法就只需要改一次。



其实上面的问题,很多计算机前辈都已经预见到了,在Apache的common-lang.jar里面就有类似的代码。如果我们想使用Apache的功能扩展,只需要将上面的那个jar包加到CLASSPATH中即可。

上面的道理很简单,大家都干过,但就是这个简单的例子,告诉了我们一个深刻的道理:

每当我们把一个jar包加入CLASSPATH中,就等于获得了jar中所有对jdk的额外支持。



我们所有的程序,其内在结构如下:

Struts2技术内幕 读书笔记一 框架的本质

最底层的就是jvm,它提供了java程序运行的基础环境;再之上就是jdk,它是构建在jvm上的基本的对象行为的定义。再之上就是jar包层次,通过上图大家也能看到,jar包层次里面似乎是一块一块的砖头,它们间是可区分的,但是这些砖头合在一起构成一层,为最上层的我们写的应用程序服务。

看eclipse里面CLASSPATH的截图,我们可以看到我们所熟悉的框架都是以一个一个的jar包的形式被加载到程序运行所依赖的CLASSPATH中的。

Struts2技术内幕 读书笔记一 框架的本质

因而我们又可以得出一个结论:

框架只是一个jar包而已,其本质是对jdk的功能扩展。



那么我们为什么要把jar包加入CLASSPATH呢?回想我们最开始说的字符串判空,我们的初衷就是:

解决中某个领域的开发中遇到的困境。





因而,框架存在的意义:

是在某个领域内,解决问题。

所以,对我们程序员来说,千万不要为了学框架而学框架,我们应该抱着为了解决某些问题的态度来学习框架。



这篇只是一个预热,下面我们再谈谈web开发的一些"基础知识"。

Struts2技术内幕 读书笔记一 框架的本质的更多相关文章

  1. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  2. Struts2技术内幕 读书笔记二 web开发的基本模式

    最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...

  3. 深入理解linux网络技术内幕读书笔记&lpar;三&rpar;--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  4. Kafka技术内幕 读书笔记之(一) Kafka入门

    在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为 ...

  5. webkit技术内幕读书笔记 &lpar;一&rpar;

    本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...

  6. MySQL技术内幕读书笔记(八)——事务

    事务的实现 ​ 事务隔离性由锁来实现.原子性.一致性.持久性通过数据库的redo log和undo log来完成.redo log称为重做日志,用来保证事务的原子性和持久性.undo log用来保证事 ...

  7. MySQL技术内幕读书笔记(七)——锁

    锁 ​ 锁是数据库系统区分与文件系统的一个关键特性.为了保证数据一致性,必须有锁的介入.数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性. lock与latch ​ 使用命令 ...

  8. MySQL技术内幕读书笔记(六)——索引与算法之全文索引

    全文索引 概述 ​ 通过索引字段的前缀进行查找,B+树索引是支持的,利用B+树索引就可以进行快速查询. SELECT * FROM blog WHERE content like 'xxx%'; ​ ...

  9. MySQL技术内幕读书笔记(二)——InnoDB存储引擎

    目录 InnoDB存储引擎 InnoDB存储架构 Checkpoint技术 Master Thread 工作方式 InnoDB关键特性(放一下,感觉看后面,再看总结吧) InnoDB存储引擎 Inno ...

随机推荐

  1. AutoMySQLBackup 3&period;0 Bug&colon;&quot&semi;du&colon; WARNING&colon; use --si&comma; not -H&quot&semi;

    案例环境: 操作系统版本: Red Hat Enterprise Linux Server release 5.7 64bit 数据库版本 : 5.6.19 MySQL Community Serve ...

  2. Python的方法解析顺序&lpar;MRO&rpar;&lbrack;转&rsqb;

    本文转载自: http://hanjianwei.com/2013/07/25/python-mro/ 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就 ...

  3. JQuery上传插件Uploadify使用详解

    本文转载http://www.cnblogs.com/oec2003/archive/2010/01/06/1640027.html Uploadify是JQuery的一个上传插件,实现的效果非常不错 ...

  4. &lbrack;ZZ&rsqb; 在windows上编译Mesa3d opengl32库

    在windows上编译Mesa3d opengl32库 cheungmine http://blog.csdn.net/ubuntu64fan/article/details/8061475 Mesa ...

  5. iOS中关于&period;pch的新建与配置问题

    以前版本的Xcode新建一个项目都会自动生成.pch,这个文件的好处是,里面添加的东西会自动添加到每个类中,也就是说我们可以把要用的宏定义,和多个头文件等放到.pch中,这样我们就不需要重复的在每个类 ...

  6. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  7. 一个tomcat部署俩个java web项目

    2.发布的时候可以发布成war包,用项目名称右键export,选择项目名称,还有发布的路径,即tomcat下的路径,参考http://zhidao.baidu.com/link?url=imOu0Uu ...

  8. python核心编程-习题-第二章

    PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1  变量,pr ...

  9. storm安装&lpar;2&rpar;ZeroMQ、JZMQ、Python、Java环境的安装

    2.ZeroMQ安装 把安装本件zeromq-2.1.7.tar.gz拷贝到home文件路径下, 给文件加入权限 chmod +x /home/zeromq-2.1.7.tar.gz 解压文件 tar ...

  10. webpack深入场景——开发环境和生产环境配置

    以前自己写一小项目时,webpack的配置基本就是一套配置,没有考虑生产环境和开发环境的区分,最近在做一个复杂的商城项目接触到了webpack的高级配置,经过两天的研究,写出了一份目前来说比叫满意的配 ...