如今的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软件的使用方法,而不打算深入了解软件内在原理和结构,无非就是了解它的接口以及配置文件的使用方法。当然,如果想对软件的运用达到得心应手的地步,还应该了解软件本身的实现原理和结构,而这些软件无非就是通过抽象、封装和实现等手段,从简单的小系统出发,构造出更加复杂,但是对外有着简洁统一的接口的大系统。
分享到:
相关推荐
【摘要】:本文探讨了中世纪早期罗马人在日耳曼王国中的政治和经济地位。西罗马帝国崩溃后,罗马人在日耳曼人的统治下依然保持着一定的政治和经济影响力。尽管日耳曼人采取了"分而治之"的策略,但罗马人的行政机构和...
在必然王国中,人类受制于自然和社会的客观规律,而在自由王国中,人类能够自觉地遵循这些规律,实现与自然的和谐共处。这需要我们通过科学的实践,探索出既能满足人类生活需求又能保护生态环境的发展模式,如绿色...
《汉字王国中的人》同步练习.doc
中班数学优质课教案《图形王国中的梯形》润新教育.txt
中班科学公开课详案《图形王国中的梯形》润新教育.txt
【《汉字王国中的人》教学案分析】 《汉字王国中的人》是一份教学案,旨在帮助学生深入了解与“人”字及其相关人体部位的汉字起源和特性。教学目标包括理解汉字的起源,学习图文并茂的解释方法,以及增强对汉字的...
【中国第五大发明——汉字说明文阅读原文附答案】汉字王国中的人原文.pdf
此外,田玉兰还强调了在学生出现错误时,教师应如何进行建设性的评价,如何通过恰当的鼓励和满怀希望的鼓励,为学生构建和谐、融洽的学习环境,让学生在数学的王国中自由遨游。 最后,文章通过分析具体教学案例,...
2019_2020学年高中语文专题1语言存在的家园第2课汉字王国中的“人”练习含解析苏教版必修3
汉字的这一特质让它在全球文字体系中独树一帜,被誉为继四大发明之后的“第五大发明”。 汉字具有超越方言和古今语言差异的功能。这一点在著名学者安子介先生的论述中得到了体现。他指出,尽管中国地域广阔,方言...
魔术棒描述尝试用HTML5重新创建心爱的游戏“魔幻王国中的Bamba”贡献... 我在开玩笑... 服务器端代码: Node.js(Express) MongoDB的ejs引擎客户端代码: html(ejs) CSS 引导程序4 JavaScript ES6 jQuery的WebSocket
【标题】和【描述】提到的是高中语文课件中关于汉字王国中“人”字的课时作业,属于语文教学内容,但核心知识点是关于汉字的结构和美学。【标签】指出这是课件资料,表明这是一个教学资源。【部分内容】则涉及到汉字...
像这样在kolmafia中安装svn checkout https://github.com/aahvocado/kolmafia-morefights/branches/master/kolmafia 通过执行脚本来运行它,可以简单地通过morefights 特征告诉您可以用来填饱肚子/肝脏/脾脏的方法...
【标题】和【描述】提到的是高中语文课程中关于汉字王国中的“人”的习题,主要涉及汉字的结构和美学,以及不同历史时期书法风格的变化。【标签】为“课件”,表明这是一个教学材料。 汉字王国中的“人”这一主题,...
因为伟大而可怕的巨龙“西拉里翁”已从他在亚伦下方的洞穴中的古老沉睡中醒来,并试图摧毁那些选择在他的王国中居住的凡人种族。 现在,蒂拉·阿勒温女皇(Emper Tir'Alerwyn)要求获得冠军。 一位要面对即将来临的...
在分数王国中,我们有像201/200这样的分数,而在小数王国里,对应的数是0.06。比较分数和小数的大小可以通过将两者转换为同一形式来进行,通常是将分数转换为小数或者将小数转换为分数。 方法一是将分数转化为小数...
1. **Java编程语言**:作为Minecraft模组开发的基础,Java是开源的、跨平台的编程语言,拥有丰富的库和强大的社区支持,使得开发者能够轻松创建各种模组,如PotatoCraft。Java的面向对象特性使得代码组织有序,易于...