(转)在Java开源王国中自由翱翔

如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题:

我学了Java已经一年多了,现在就只能用Jsp写点东西,其它的东西实在太多了,我整天学都学不完,很迷惘,不知道该如何有针对性地去学,去找到一份Java工作,现在是困死在Java里了。

撰写本文,目的是为了帮助读者看清Java万花筒的本质,从复杂的表象中寻找普遍的规律,只有掌握了普遍的规律,才能以不变应万变,轻轻松松的把握Java技术发展的新趋势,迅速的领略并且会熟练运用一门新的技术,而不成为被动的追随者,知其然而不知其所以然。

在寻找普遍规律之前,让我们先看看Java的发展历程:
(1)SUN的主流技术的发展
GUI界面:Java AWT API--〉Java Swing API
JavaWeb: Servlet--〉JSP--〉JSF
持久化层:JDBC--〉CMP EJB或BMP EJB或JDO
分布式应用:Socket--〉RMI--〉J2EE或Java Web Service

(2)主要Java开源软件的种类
JavaWeb容器: Tomcat、Resin
EJB容器: JBoss
框架: Java Web框架(Struts)、业务逻辑层框架(Spring)
持久化层: DAO、ORM映射工具(如Hibernate、OJB)
工程管理工具:ANT、Elipse
日志输出工具: Log4J
JavaWeb服务工具:Apache Axis

促成Java世界如此绚丽多姿的基本动力在于以下核心思想:

接口与实现

不同的软件系统之间通过接口来交互。软件系统只对外公开接口,封装实现细节。接口描述了软件系统具备的功能,也就是指定软件系统能够做什么,但是没有指明怎么去做。接口具有三大作用:

(1)对于接口制订者:SUN公司通过定义接口,来制定新的软件系统的规范,例如Servlet规范、EJB规范和JDO规范,这些规范主要以接口的形式描述了软件系统必须具备的功能。通过制定规范,SUN公司指引着Java技术的发展方向,同时给接口的实现者提供了自由发挥的广阔空间。

(2)对于接口实现者:接口实现者以特定的方式实现标准的规范。例如一些开放源代码软件,如Tomcat和Resin分别以不同的实现方式,实现了标准的Servlet规范。同一个接口允许有多种实现,使得Java领域保持着百花齐放、百家争鸣的良好势头,

(3)对于接口调用者:接口调用者的程序具有良好的可移植性。以JavaWeb应用为例,由于Tomcat和Resin遵守同样的规范,因此用户开发的JavaWeb应用能够顺利的从Tomcat容器移植到Resin容器中。

封装与抽象

封装指的是在一个大系统中包含一个小系统,大系统是建立在已有小系统的基础上的更为复杂、功能更强大的系统。例如,Hibernate对JDBC API进行了封装,在Hibernate内部依赖JDBC API来操纵数据库,但是Hibernate API比JDBC API具有更强大的功能,例如JDBC API只具有连接和操纵数据库的功能,而Hibernate不仅具备这一功能,还具有对象-关系映射的功能。

抽象是指从已经存在的具有相似功能、但不同接口的系统中抽取共性,提炼出统一的接口。例如,Hibernate Transaction API是对JDBC Transaction API和Java Transaction API(JTA)的抽象。 

继承与扩展

继承与扩展是一对孪生兄弟,当两个类之间存在继承关系,那么必定也存在扩展关系。继承的优点在于提高代码的可重用性,子类会继承父类的所有public和protected类型的属性和方法,在子类的程序代码中,无需重复定义这些属性和方法。扩展的优点在于使软件应用具有可伸缩性,能够在已有功能的基础上扩展新的功能。

Struts框架充分运用了扩展思想。Struts框架中的许多类都是供应用程序扩展的,其中最主要的一个是Action类,在Action类中已经定义了一些通用的方法,采用Struts框架的JavaWeb应用将扩展Action类,创建负责特定流程或业务的客户化的Action类。

对象的生命周期

当一个对象通过new语句创建后,它就会拥有一块固定的内存空间,如果没有任何变量引用它,它就会结束生命周期,它占用的内存空间随时可能被JVM的垃圾回收器回收。

应用程序如何管理对象的生命周期呢?目前比较流行的做法是把对象存放在一个“范围”内。例如在JavaWeb应用中,JavaBean可以存放在request、session或application范围内。每个范围对应一个对象,例如request范围对应HttpServletRequest对象,session范围对应HttpSession对象,application范围对应ServletContext对象。把一个JavaBean存放在request范围内,实质上是在HttpServletRequest对象的一个集合属性中加入这个JavaBean的引用,这个集合属性也被称为HttpServletRequest对象的缓存。

把一个JavaBean存放在request范围内,等价于以下两种说法:
把一个JavaBean加入到HttpServletRequest对象的缓存中
把一个JavaBean和HttpServletRequest对象关联

当JavaBean位于request范围内,这个JavaBean的生命周期依赖于HttpServletRequest对象的生命周期,当HttpServletRequest对象结束生命周期,并且这个JavaBean也不被应用程序中的其他变量引用,那么它就会结束生命周期。

那么HttpServletRequest对象本身的生命周期由谁管理呢?这是由JavaWeb容器(也称Servlet容器)来管理的。对于每个HTTP请求,JavaWeb容器会自动创建一个HttpServletRequest对象,当HTTP请求的响应完毕,JavaWeb容器就会结束这个对象的生命周期。同理,当每个HTTP会话开始,JavaWeb容器会自动创建一个HttpSession对象,当这个会话结束,JavaWeb容器就会结束这个对象的生命周期;当每个JavaWeb应用启动时,JavaWeb容器会自动创建一个ServletContext对象,当这个应用被关闭,JavaWeb容器就会结束这个对象的生命周期。

在Hibernate中,在net.sf.hibernate.Session范围内加入一个持久化对象,实质上是在Session对象的集合属性中加入这个持久化对象的引用。以下几种说法是等价的:
在Session范围内加入一个持久化对象
在Session的缓存中加入一个持久化对象
把一个持久化对象与Session关联

值得注意的是,Hibernate的Session不仅能管理缓存中持久化对象的生命周期,还会负责按照持久化对象的状态的变化,来同步更新数据库。

集成开源软件的基本步骤

在开发Java应用时,为了提高开发效率,缩短开发周期,常常需要集成第三方提供的Java软件,如ORM映射工具Hibernate、MVC框架Struts、日志工具Log4J和Web服务软件Apache AXIS等。在自己的应用中集成这些第三方软件时,大体步骤都很相似。
(1) 把它们的JAR文件拷贝到classpath中。
(2) 创建它们的配置文件(XML格式的文件或者Java属性文件),这些配置文件通常也位于classpath中。
(3) 在程序中访问它们的接口。

接口与配置文件,是软件系统对外公开的两个主要窗口。无论是Tomcat、Struts还是Hibernate,都离不开配置文件,与编写程序代码相比,配置文件能提高软件的可维护性,更加灵活的适应用户变化的需求,但是,配置文件不擅长表达非常复杂的逻辑,在这种情况下,必须求助于程序代码。作为软件使用者,如果仅仅想快速掌握一个新的Java软件的使用方法,而不打算深入了解软件内在原理和结构,无非就是了解它的接口以及配置文件的使用方法。当然,如果想对软件的运用达到得心应手的地步,还应该了解软件本身的实现原理和结构,而这些软件无非就是通过抽象、封装和实现等手段,从简单的小系统出发,构造出更加复杂,但是对外有着简洁统一的接口的大系统。

孙卫琴Java培训讲义 此资源为孙卫琴老师讲解java编程基础的课程讲义,是初学者的好帮手 立即下载

相关推荐

Dify实战:智能邮件工作流配置全解析

本文详细解析了如何利用Dify平台配置智能邮件工作流,实现邮件处理的自动化与智能化。内容涵盖从获取邮箱授权、安装插件、安全配置环境变量,到构建邮件发送工作流、创建调用该工作流的智能体(Agent)的完整步骤,并分享了连接知识库实现智能客服、定时发送日报等进阶自动化场景,旨在帮助用户显著提升邮件处理效率。

t8u9v0w1x的博客 793

在Java开源的王国中自由翱翔

在Java开源的王国中自由翱翔 作者:孙卫琴 发文时间:2005.06.06 在如今的Java领域,各种新

chendehui4work的备忘录专栏(邮件地址:chendehui4work@163.com) 1358

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 1 超级指标 指标公式:买卖提示非常明显(适合通达信) 指标源码如下: M:3 100 60 N 3 100 30 散户线: 100*(HHV(HIGH,M)-CLOSE)/(HHV(HIGH,M)-LLV(LOW,M));RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,5,1); D:=SMA(K,3,1); J:=3*K-2*D;主力

m0_60244077的博客 3万+

孙卫琴的《精通Vue.js》读书笔记-Vue组件的数据监听

如果Vue组件的一个变量num会被频繁更新,并且当变量num每次被更新时,需要进行一系列耗时的操作,比如访问远程服务器的资源,或者通过复杂耗时的运算更新那些依赖变量num的其他变量(比如result变量)。在这种情况下,可以通过Vue框架的数据监听器Watcher来实现对变量num的监听。Vue的watch选项会通过Watcher来监听数据。例程1的mywatch.html演示了watch选项的基本用法。例程1 mywatch.html。......

csdnuserlala的博客 372

ZYNQ双核通信实战:手把手教你用OpenAMP搭建Linux+FreeRTOS开发环境(2018.3版)

本文详细介绍了如何在ZYNQ平台上使用OpenAMP框架实现双核通信,构建Linux与FreeRTOS协同开发环境。从开发环境配置、系统组件编译到OpenAMP框架应用,手把手指导开发者完成ZYNQ双核通信系统的搭建与调试,为异构计算开发提供实用解决方案。

weixin_33737134的博客 475

Python量化- Black-Litterman 模型

​​​​​​​Black-Litterman 模型由 Fischer Black 和 Robert Litterman 于 1992 年开发,采用贝叶斯方法进行资产配置。该模型通过结合先前的回报估计(可以从多个来源得出)并结合投资者对未来回报的独特预期来优化分配权重。

探索人工智能领域 1030

孙卫琴——缅怀张孝祥老师(原文)

作为热爱软件开发的晚辈,对软件开发高手是敬佩的。虽然,我并没有去参加过java的培训。但是,我是通过java的视频来自学的。包括:王勇。马士兵老师。再就是 传智播客的了。自从听了张孝祥老师的视频以及看了张孝祥老师的书,感觉到:相见恨晚啊,给人一种通俗易懂的感觉,就像是喝了上品的就一般,陶醉其中爱不释手,感觉能把技术知识讲解的如此透彻,令我心生佩服。 而 孙卫琴 老师也是一位技术高...

编程资料大全 286

热红外图像小目标检测算法综述

热红外小目标检测算法综述,着重介绍基于深度学习的小目标检测算法

Littro Innovations 4244

孙卫琴的《精通JPA与Hibernate》的读书笔记:FetchType.LAZY延迟检索策略

对于一对多关联和多对多关联,应该优先考虑使用默认的延迟检索策略。在Customer类中,以下代码对orders集合属性采用延迟检索策略: //采用默认的延迟检索策略 @OneToMany(mappedBy="customer") private Set<Order> orders = new HashSet<Order>(); 或者: //显式设置延迟检索策略 @OneToMany(mappedBy="customer", fetch=FetchType.

csdnuserlala的博客 283

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hibernate实战开发教程

基本信息 讲师: 孙卫琴 时长:45分钟 集数:5 每集定价:10 元 购买地址:http://product.china-pub.com/3501778 课程介绍 本课程为Hibernater初级入门课程。 作者介绍 畅销图书《精通Struts:基

hzpeixun的专栏 665

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

在Java开源王国中自由翱翔

在如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题:我学了Java已经一年多了,现在就只能用Jsp写点东西,其

shark's BLOG 772

孙卫琴 在Java开源王国中自由翱翔

在如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题:我学了Java已经一年多了,现在就只能用Jsp写点东西,其...

Captain 193

重要网址

http://www.dfsna.com/?id=08008 //九味参容 http://www.grow100.com.cn/BONEcore/buy.html //男性增高 http://www.gjnkw.com/cnindex.html //北京国际男科医学科学研究院 1990元/疗程 http://www.java2s.com/Open-Source/Java-D...

makao45683968的博客 396

书单丨把握Java技术发展的新趋势!

Java世界就像万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。 各种新技术,新工具层出不穷,本书单带你轻轻松松把握Java技术发展的新趋势! 01 ▊《Java编程方法论:响应式Spring Reactor 3设计与实现》 知秋 著 Spring官方布道师、Spring Reactor项目创始人等倾情作序 一本成体系的、传授编程思想和技巧的响应式编程学习图书 本书主要专注于解读Spring Reactor 3的代码设计与实现,以揭示其中的设计精髓,帮助大家灵活

博文视点(北京)官方博客 758

孙卫琴的《精通Vue.js》读书笔记-Vuex中异步操作

本文参考孙卫琴,杜聚宾所创作的一书此外,还可以通过async/await来执行异步操作,例如。

csdnuserlala的博客 293

有关孙卫琴的个人网站

 其中提供JAVA的视频讲座下载和Hibernate的视频讲座下载,对JAVA的深入学习非常有帮助。提供各类JAVA文档和讲义的下载,还提供一个专门技术讨论的论坛。JavaThinker的主页:http://www.javathinker.org/index.jsp

Johnson技术天地 4964

读 孙卫琴《Tomcat与Javaweb开发技术详解》

  最初读这本书是因为做比赛要用到服务器端,但是网络上的知识太多了,感觉自己丝毫没有头绪,于是在知乎上找到了一本推荐的书,如上。  现在对于网络编程的那些细节还没有去了解,甚至说是环境还没有按照书上配好,但是按照书上的章节,以一定的节奏算是把这本书看完了。至少目前对于网络编程有一个了解,知道了jsp文件是干嘛的,xml文件中那些奇奇怪怪的符号是干嘛的,啥是servlet,啥是Tomcat,啥是MV...

xueying_2017的博客 6151
上一篇: (转)Java开发技术十年回顾与展望
下一篇: (转)从Coding Fan到真正的技术专家
litc603
博客等级 码龄18年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值