a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 175|回复: 3

[基础知识] 在Java开源的王国中自由翱翔

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
  在如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题:
. q" d- b$ u* k; Z0 y2 ^  我学了Java已经一年多了,现在就只能用Jsp写点东西,其它的东西实在太多了,我整天学都学不完,很迷惘,不知道该如何有针对性地去学,去找到一份Java工作,现在是困死在Java里了。
9 o/ ]5 N  B  L- I& E: G' U9 n
. H  v0 x. J4 ^9 Z( q& f+ q  撰写本文,目的是为了帮助读者看清Java万花筒的本质,从复杂的表象中寻找普遍的规律,只有掌握了普遍的规律,才能以不变应万变,轻轻松松的把握Java技术发展的新趋势,迅速的领略并且会熟练运用一门新的技术,而不成为被动的追随者,知其然而不知其所以然。在寻找普遍规律之前,让我们先看看Java的发展历程:
. o  `/ g% n1 u. z
. {- P0 K" O( o(1)SUN的主流技术的发展# |! Q0 U1 u. l2 l
' t: {& u5 {+ M% z2 t9 C& t3 O
  GUI界面:Java AWT API--〉Java Swing API
% a0 w  W) o; {, S- d6 ^+ r; N0 s0 B$ h" V# @, w
  JavaWeb: Servlet--〉JSP--〉JSF2 Z/ p3 B( O& i/ W' |* B  U

4 a3 D, T  i+ g' I" \1 h  持久化层:JDBC--〉CMP EJB或BMP EJB或JDO
- a3 i$ v6 T* `' i3 F9 u
7 d4 n# a# F. X) T, B  分布式应用:Socket--〉RMI--〉J2EE或Java Web Service* I9 }( }# {1 C3 n2 T, }

  H+ [9 N* l& z; {2 [& V" A) g(2)主要Java开源软件的种类
& P2 `5 k8 d' `2 x) }& o% L( K4 E0 x2 q: s) y; m
  JavaWeb容器: Tomcat、Resin# [, |6 Q9 ]. d2 k# f

! U4 J  [* I; `7 ]/ N5 g  EJB容器: JBoss
7 [% D+ f  T: F5 f; W$ Z! H% `4 h1 r8 r6 L
  框架: Java Web框架(Struts)、业务逻辑层框架(Spring)
. k" u$ Z1 G: A2 G7 O0 z) `/ k3 P, M) H) e1 l3 n2 J- Y
  持久化层: DAO、ORM映射工具(如Hibernate、OJB)
; C& }2 H' T) P( h" ^' X, p4 g: z+ v
  工程管理工具:ANT、Elipse  s) C8 W; U* U1 m6 S. ~" ?
! u" T/ c- d! y* I6 u2 k" g9 S
  日志输出工具: Log4J
5 v9 p3 h% n# m
7 Z$ f! z0 o9 F4 o9 a  JavaWeb服务工具:Apache Axis( y3 y' Q$ ?  `' X3 P
2 G/ c5 y, r8 b+ E9 a$ P6 \
  促成Java世界如此绚丽多姿的基本动力在于以下核心思想:
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:28 | 显示全部楼层

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

 接口与实现7 E2 a2 r" J' _7 n- I
( ]% f5 s# W% C  l% W
  不同的软件系统之间通过接口来交互。软件系统只对外公开接口,封装实现细节。接口描述了软件系统具备的功能,也就是指定软件系统能够做什么,但是没有指明怎么去做。接口具有三大作用:
% P3 ]0 t$ T! e  s7 y. h$ ^& h) _" N" b3 C9 G1 ?; I3 P
  (1)对于接口制订者:SUN公司通过定义接口,来制定新的软件系统的规范,例如Servlet规范、EJB规范和JDO规范,这些规范主要以接口的形式描述了软件系统必须具备的功能。通过制定规范,SUN公司指引着Java技术的发展方向,同时给接口的实现者提供了自由发挥的广阔空间。
; v* d3 N- N* q" o. H' J/ q; R" A$ n
  (2)对于接口实现者:接口实现者以特定的方式实现标准的规范。例如一些开放源代码软件,如Tomcat和Resin分别以不同的实现方式,实现了标准的Servlet规范。同一个接口允许有多种实现,使得Java领域保持着百花齐放、百家争鸣的良好势头。
! e) d/ `# b1 c6 R! K) x4 l( z
4 C1 h! r/ G0 J8 w' y6 s, c- b2 ~  (3)对于接口调用者:接口调用者的程序具有良好的可移植性。以JavaWeb应用为例,由于Tomcat和Resin遵守同样的规范,因此用户开发的JavaWeb应用能够顺利的从Tomcat容器移植到Resin容器中。9 `+ Y$ ?# b: p) O' C( F+ W

. a* ?& C- t& Q( {+ e  封装与抽象
! s: f% O! ]0 o( M; W( J/ F  j8 R# P$ t
  封装指的是在一个大系统中包含一个小系统,大系统是建立在已有小系统的基础上的更为复杂、功能更强大的系统。例如,Hibernate对JDBC API进行了封装,在Hibernate内部依赖JDBC API来操纵数据库,但是Hibernate API比JDBC API具有更强大的功能,例如JDBC API只具有连接和操纵数据库的功能,而Hibernate不仅具备这一功能,还具有对象-关系映射的功能。
  }0 P+ f9 q# A$ U2 o1 {
0 o& t; _  k1 G) m" ]  抽象是指从已经存在的具有相似功能、但不同接口的系统中抽取共性,提炼出统一的接口。例如,Hibernate Transaction API是对JDBC Transaction API和Java Transaction API(JTA)的抽象。, ?) A8 x$ B4 [9 z9 k" a2 L% c

" v3 i- m& [" e  继承与扩展
  z/ V# I, f- F) c. e5 o/ W' D9 S' u8 o  L6 |9 w. d( R
  继承与扩展是一对孪生兄弟,当两个类之间存在继承关系,那么必定也存在扩展关系。继承的优点在于提高代码的可重用性,子类会继承父类的所有public和protected类型的属性和方法,在子类的程序代码中,无需重复定义这些属性和方法。扩展的优点在于使软件应用具有可伸缩性,能够在已有功能的基础上扩展新的功能。
( T- m! ]5 U/ x0 F6 {3 y" A; J5 {# x5 W% ?
  Struts框架充分运用了扩展思想。Struts框架中的许多类都是供应用程序扩展的,其中最主要的一个是Action类,在Action类中已经定义了一些通用的方法,采用Struts框架的JavaWeb应用将扩展Action类,创建负责特定流程或业务的客户化的Action类。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:29 | 显示全部楼层

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

  对象的生命周期
' j0 ~, y3 e  o$ {7 h
4 L" h( o, M" L/ F4 h2 N5 D7 a  当一个对象通过new语句创建后,它就会拥有一块固定的内存空间,如果没有任何变量引用它,它就会结束生命周期,它占用的内存空间随时可能被JVM的垃圾回收器回收。
! w$ e% B$ Z% g" ?1 L1 V+ i
; E# z; K4 F7 n8 {1 R1 e  应用程序如何管理对象的生命周期呢?目前比较流行的做法是把对象存放在一个"范围"内。例如在JavaWeb应用中,JavaBean可以存放在request、session或application范围内。每个范围对应一个对象,例如request范围对应HttpServletRequest对象,session范围对应HttpSession对象,application范围对应ServletContext对象。
5 f, k( s2 C0 H$ S
4 B) b$ c$ w9 Q3 i$ N- X  把一个JavaBean存放在request范围内,实质上是在HttpServletRequest对象的一个集合属性中加入这个JavaBean的引用,这个集合属性也被称为HttpServletRequest对象的缓存。
8 w9 Q; k0 |/ E9 o# y! \
1 R/ o. Y- F+ z9 O+ n  把一个JavaBean存放在request范围内,等价于以下两种说法:) t" F4 H" g, I- V( n
4 I$ o# ?& F: g) T
  把一个JavaBean加入到HttpServletRequest对象的缓存中
+ k4 X# j! F& b3 q* `0 {& _+ y
+ u5 d; e; G+ ^- x" U5 j' }  把一个JavaBean和HttpServletRequest对象关联
: q* N% w5 P/ h: i5 f3 h
- u- ]8 w8 E6 R7 r  k& H- R9 q  当JavaBean位于request范围内,这个JavaBean的生命周期依赖于HttpServletRequest对象的生命周期,当HttpServletRequest对象结束生命周期,并且这个JavaBean也不被应用程序中的其他变量引用,那么它就会结束生命周期。( \- a5 u# H, K% c

, X! y3 z$ X4 ?4 r  _* M  那么HttpServletRequest对象本身的生命周期由谁管理呢?这是由JavaWeb容器(也称Servlet容器)来管理的。对于每个HTTP请求,JavaWeb容器会自动创建一个HttpServletRequest对象,当HTTP请求的响应完毕,JavaWeb容器就会结束这个对象的生命周期。* q1 M! d- v+ Z# \
$ `: j0 B' y. s) A8 o8 m& o( G/ P
  同理,当每个HTTP会话开始,JavaWeb容器会自动创建一个HttpSession对象,当这个会话结束,JavaWeb容器就会结束这个对象的生命周期;当每个JavaWeb应用启动时,JavaWeb容器会自动创建一个ServletContext对象,当这个应用被关闭,JavaWeb容器就会结束这个对象的生命周期。. Z$ d! B, z$ ~8 M' I. g9 J0 L# ~

+ n- Q1 a! F6 k( X  Y  在Hibernate中,在net.sf.hibernate.Session范围内加入一个持久化对象,实质上是在Session对象的集合属性中加入这个持久化对象的引用。以下几种说法是等价的:
' r' t6 E3 k) _' o. a+ |; E+ L* X2 O. R! d2 X
  在Session范围内加入一个持久化对象
$ C6 x( J& ^( U& H1 t
2 m- r) m: q1 n! m: N; I, W5 R# E. D  在Session的缓存中加入一个持久化对象8 `& ]' k- b6 Q0 a2 L: ?* L% H
7 h% j1 |' W- N. d8 d% G; N
  把一个持久化对象与Session关联/ F( _7 `/ y% J1 {/ u! K2 B
& w) y6 O( L! Z1 u6 B7 p& I
  值得注意的是,Hibernate的Session不仅能管理缓存中持久化对象的生命周期,还会负责按照持久化对象的状态的变化,来同步更新数据库。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:37:30 | 显示全部楼层

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

 集成开源软件的基本步骤) }( C2 c0 ~7 ?

4 j2 k) M8 _) S" v  在开发Java应用时,为了提高开发效率,缩短开发周期,常常需要集成第三方提供的Java软件,如ORM映射工具Hibernate、MVC框架Struts、日志工具Log4J和Web服务软件Apache AXIS等。在自己的应用中集成这些第三方软件时,大体步骤都很相似。
5 h/ E+ a4 k+ f6 v
3 x% d/ j$ F1 n3 z# `$ l& p  (1) 把它们的JAR文件拷贝到classpath中。) p1 Z3 T7 ]. Z' L2 g3 V$ W

0 H; @4 t8 B6 X+ w" c* S' x  (2) 创建它们的配置文件(XML格式的文件或者Java属性文件),这些配置文件通常也位于classpath中。2 X4 |3 W8 \+ P* c, ?# Y5 P! ?
: x' i) M& v3 B2 F4 Q1 R' a
  (3) 在程序中访问它们的接口。外语学习网
! ]4 T3 [3 K0 `% L0 e5 @: ?. x% }
( q$ {. l' q% J! Z1 E) H1 s* M  接口与配置文件,是软件系统对外公开的两个主要窗口。无论是Tomcat、Struts还是Hibernate,都离不开配置文件,与编写程序代码相比,配置文件能提高软件的可维护性,更加灵活的适应用户变化的需求,但是,配置文件不擅长表达非常复杂的逻辑,在这种情况下,必须求助于程序代码。: _/ a( ^' _5 c* ^8 U% A

- r, f% H: o7 N: E% B" r# n  作为软件使用者,如果仅仅想快速掌握一个新的Java软件的使用方法,而不打算深入了解软件内在原理和结构,无非就是了解它的接口以及配置文件的使用方法。当然,如果想对软件的运用达到得心应手的地步,还应该了解软件本身的实现原理和结构,而这些软件无非就是通过抽象、封装和实现等手段,从简单的小系统出发,构造出更加复杂,但是对外有着简洁统一的接口的大系统。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-2 20:49 , Processed in 0.361872 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表