a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 172|回复: 3

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

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
  在如今的Java领域,各种新技术,新工具层出不穷,一方面,每一种技术都会不停的升级换代,另一方面,还会不断涌现出新的技术和工具。Java世界就像小时候玩的万花筒,尽管实质上只是由几个普通的玻璃碎片组成,但只要轻轻一摇,就会变化出千万种缤纷的图案。Java世界如此变化多端,很容易让初学Java的人有无从下手的感觉。常常会有读者问我这样的问题:; Y7 j% K# l5 S
  我学了Java已经一年多了,现在就只能用Jsp写点东西,其它的东西实在太多了,我整天学都学不完,很迷惘,不知道该如何有针对性地去学,去找到一份Java工作,现在是困死在Java里了。( t  h2 [4 Z0 o8 O: @. f) e/ Y
8 z1 ^' C0 Z  q8 l- y
  撰写本文,目的是为了帮助读者看清Java万花筒的本质,从复杂的表象中寻找普遍的规律,只有掌握了普遍的规律,才能以不变应万变,轻轻松松的把握Java技术发展的新趋势,迅速的领略并且会熟练运用一门新的技术,而不成为被动的追随者,知其然而不知其所以然。在寻找普遍规律之前,让我们先看看Java的发展历程:8 g" w+ c. W" G1 ~

# _2 Z1 l* ^) X6 R2 s3 e(1)SUN的主流技术的发展" i+ y+ O  f3 A7 {0 Y" A: {) W

( b( ?& j$ [1 w  GUI界面:Java AWT API--〉Java Swing API
% X& `6 R. Y) q; Q4 q# E( [( @( W, g+ [8 @) t
  JavaWeb: Servlet--〉JSP--〉JSF
' n  L, [; q8 k* [) s* I. ]1 f; p9 L7 H; Q* D* [. @8 r
  持久化层:JDBC--〉CMP EJB或BMP EJB或JDO
. S' `  ?+ y/ Y% G7 A4 g% S/ [  W8 I5 X: y) r& }6 J' S
  分布式应用:Socket--〉RMI--〉J2EE或Java Web Service
2 I* z5 g( e3 z. U7 J% c. J0 P
, Y" e" N! ?: h(2)主要Java开源软件的种类0 @$ U' T, [. l- l4 w; f) D
. U- u5 A6 s% f# q8 J
  JavaWeb容器: Tomcat、Resin
% Y% V( }$ |) t  t3 r6 w
8 w4 u% m9 `$ G0 @" X  j& J7 R  EJB容器: JBoss' z9 r% _. o7 F. W. r6 T  v+ I

4 t. `, c2 O4 v; y  框架: Java Web框架(Struts)、业务逻辑层框架(Spring)
  S7 n- h/ Z: h3 V  y) t1 q) T1 e' h9 r' Q# T( B' F5 e$ X
  持久化层: DAO、ORM映射工具(如Hibernate、OJB)
1 i- Z3 k9 A" y7 L4 M& Y+ p8 f5 V& H: h8 K
  工程管理工具:ANT、Elipse& K6 b- p) [$ i  u, i' R

& X" j2 i: I8 O2 P, h  日志输出工具: Log4J; H! y: ?) o0 ^0 s1 C2 n
  D- b% N9 g+ F! }4 E" u  I
  JavaWeb服务工具:Apache Axis
* K: G& r9 J! a2 b  A" Z) g( e  i7 m5 a) P. i, d  S7 Z4 [  ?) u
  促成Java世界如此绚丽多姿的基本动力在于以下核心思想:
回复

使用道具 举报

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

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

 接口与实现/ B% s5 W0 F5 i$ V
0 v, i1 I8 @% m! _
  不同的软件系统之间通过接口来交互。软件系统只对外公开接口,封装实现细节。接口描述了软件系统具备的功能,也就是指定软件系统能够做什么,但是没有指明怎么去做。接口具有三大作用:
& m& S; L* c" Z
5 i9 T" {1 |5 D  t" \  (1)对于接口制订者:SUN公司通过定义接口,来制定新的软件系统的规范,例如Servlet规范、EJB规范和JDO规范,这些规范主要以接口的形式描述了软件系统必须具备的功能。通过制定规范,SUN公司指引着Java技术的发展方向,同时给接口的实现者提供了自由发挥的广阔空间。/ i, ]8 P7 Z( u' p! i

- j0 G; R% C3 H3 M( }$ R& Q  (2)对于接口实现者:接口实现者以特定的方式实现标准的规范。例如一些开放源代码软件,如Tomcat和Resin分别以不同的实现方式,实现了标准的Servlet规范。同一个接口允许有多种实现,使得Java领域保持着百花齐放、百家争鸣的良好势头。+ w; P/ A. B1 N4 }/ S# Q

7 z& h% B; g3 S" [4 A: s  (3)对于接口调用者:接口调用者的程序具有良好的可移植性。以JavaWeb应用为例,由于Tomcat和Resin遵守同样的规范,因此用户开发的JavaWeb应用能够顺利的从Tomcat容器移植到Resin容器中。
* J  H. C4 f2 w4 X8 k
2 s0 Z' y; z7 d* ~+ k- q$ l  封装与抽象
2 [. D6 N( s! r: ~- n7 _# y: f3 z. _  @% J7 _/ U# @( P" x
  封装指的是在一个大系统中包含一个小系统,大系统是建立在已有小系统的基础上的更为复杂、功能更强大的系统。例如,Hibernate对JDBC API进行了封装,在Hibernate内部依赖JDBC API来操纵数据库,但是Hibernate API比JDBC API具有更强大的功能,例如JDBC API只具有连接和操纵数据库的功能,而Hibernate不仅具备这一功能,还具有对象-关系映射的功能。
' |7 h4 W. T; j' w3 Z
& C0 {# A4 @2 X+ Y* `% ^% I5 w/ t  抽象是指从已经存在的具有相似功能、但不同接口的系统中抽取共性,提炼出统一的接口。例如,Hibernate Transaction API是对JDBC Transaction API和Java Transaction API(JTA)的抽象。, m1 Z; j+ ^& N& x2 q7 P: Z

9 v7 J1 R) i# C. Z" D* e  继承与扩展" \4 b! h  z7 K2 N) N* i

3 r; E( Q* ~& L; Q* y  J  继承与扩展是一对孪生兄弟,当两个类之间存在继承关系,那么必定也存在扩展关系。继承的优点在于提高代码的可重用性,子类会继承父类的所有public和protected类型的属性和方法,在子类的程序代码中,无需重复定义这些属性和方法。扩展的优点在于使软件应用具有可伸缩性,能够在已有功能的基础上扩展新的功能。
2 ~8 \2 l. g- C$ U
/ D+ x7 }+ b3 H* A. D# o  Struts框架充分运用了扩展思想。Struts框架中的许多类都是供应用程序扩展的,其中最主要的一个是Action类,在Action类中已经定义了一些通用的方法,采用Struts框架的JavaWeb应用将扩展Action类,创建负责特定流程或业务的客户化的Action类。
回复 支持 反对

使用道具 举报

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

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

  对象的生命周期
5 p, {: o( q9 C  V
7 O3 Q% [' {5 |  当一个对象通过new语句创建后,它就会拥有一块固定的内存空间,如果没有任何变量引用它,它就会结束生命周期,它占用的内存空间随时可能被JVM的垃圾回收器回收。
  d4 N) w5 m/ n% w' T
5 l6 l- U+ ?" p" q2 g4 {% n+ \  应用程序如何管理对象的生命周期呢?目前比较流行的做法是把对象存放在一个"范围"内。例如在JavaWeb应用中,JavaBean可以存放在request、session或application范围内。每个范围对应一个对象,例如request范围对应HttpServletRequest对象,session范围对应HttpSession对象,application范围对应ServletContext对象。( ~: \) j; Q! {, v* p4 z

; }8 B" o/ T+ q3 ]- \  把一个JavaBean存放在request范围内,实质上是在HttpServletRequest对象的一个集合属性中加入这个JavaBean的引用,这个集合属性也被称为HttpServletRequest对象的缓存。
! ^0 b1 N8 g1 b% w3 k0 }8 X. ^0 ~- R6 R3 m9 m
  把一个JavaBean存放在request范围内,等价于以下两种说法:
+ i$ \8 V2 R, _6 r, p" I3 E% ]7 ?4 @- r
  把一个JavaBean加入到HttpServletRequest对象的缓存中
4 \8 s, \! O' b6 d# G% E
) [3 i' D1 g$ e/ O( D  把一个JavaBean和HttpServletRequest对象关联5 C' A- d  C7 {8 ]
) B7 C; c! ?4 P: o! }) e+ ^' Q
  当JavaBean位于request范围内,这个JavaBean的生命周期依赖于HttpServletRequest对象的生命周期,当HttpServletRequest对象结束生命周期,并且这个JavaBean也不被应用程序中的其他变量引用,那么它就会结束生命周期。. p; j$ U" x0 J/ k

7 t+ i5 X! i, X5 E' e  那么HttpServletRequest对象本身的生命周期由谁管理呢?这是由JavaWeb容器(也称Servlet容器)来管理的。对于每个HTTP请求,JavaWeb容器会自动创建一个HttpServletRequest对象,当HTTP请求的响应完毕,JavaWeb容器就会结束这个对象的生命周期。
- q) {* ^4 J& ]% @/ k2 a6 J9 H
! f) \8 z; }! n; ~: A2 E& `  同理,当每个HTTP会话开始,JavaWeb容器会自动创建一个HttpSession对象,当这个会话结束,JavaWeb容器就会结束这个对象的生命周期;当每个JavaWeb应用启动时,JavaWeb容器会自动创建一个ServletContext对象,当这个应用被关闭,JavaWeb容器就会结束这个对象的生命周期。* @( r! R- I4 Q: Q
  C9 i4 F) _/ j# E
  在Hibernate中,在net.sf.hibernate.Session范围内加入一个持久化对象,实质上是在Session对象的集合属性中加入这个持久化对象的引用。以下几种说法是等价的:; P2 X) b0 I9 b% v! _2 z. g

& ~8 k2 l1 }/ m  在Session范围内加入一个持久化对象1 u( F& d- _; K& L& k
" t6 p1 K0 E4 i; g" |
  在Session的缓存中加入一个持久化对象5 F: @3 D; L; m

5 A- g9 Y- u2 _) A; v  把一个持久化对象与Session关联
8 ?* t: d( t( l. N# F5 W: E0 V6 I9 k% \  W2 A$ d! q
  值得注意的是,Hibernate的Session不仅能管理缓存中持久化对象的生命周期,还会负责按照持久化对象的状态的变化,来同步更新数据库。
回复 支持 反对

使用道具 举报

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

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

 集成开源软件的基本步骤
9 R* k( L. D" |$ z2 Q8 n# z$ i/ \7 p- r  D7 z: \1 t
  在开发Java应用时,为了提高开发效率,缩短开发周期,常常需要集成第三方提供的Java软件,如ORM映射工具Hibernate、MVC框架Struts、日志工具Log4J和Web服务软件Apache AXIS等。在自己的应用中集成这些第三方软件时,大体步骤都很相似。
$ ~8 u% [# B& f3 C$ {+ Q
; l; T# C  Z; D& E# I2 R( Z  (1) 把它们的JAR文件拷贝到classpath中。
  w4 [2 i$ n  [& L( W, y: V  i2 p8 A3 K" l0 Y3 s8 j
  (2) 创建它们的配置文件(XML格式的文件或者Java属性文件),这些配置文件通常也位于classpath中。
. }8 K/ A7 N2 V% e; L* R' a& H, m
7 M1 C8 \1 j/ K/ _  (3) 在程序中访问它们的接口。外语学习网9 M# X0 {1 r6 k- O. l- {
9 `1 B2 A+ [% L( O) Z$ @4 g
  接口与配置文件,是软件系统对外公开的两个主要窗口。无论是Tomcat、Struts还是Hibernate,都离不开配置文件,与编写程序代码相比,配置文件能提高软件的可维护性,更加灵活的适应用户变化的需求,但是,配置文件不擅长表达非常复杂的逻辑,在这种情况下,必须求助于程序代码。# {8 I5 F0 d. P( `

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 21:11 , Processed in 0.178357 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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