给初学者之八:java高级应用之框架篇

给初学者之八:java高级应用之框架篇
没错,我没敲错
之所以不再声称是企业级应用而称之为高级应用是因为下面要讲的东西属于纯民间性质

java具体应用的上层建筑,可用可不用,没有人强迫你用


首先给框架//framework 下一个定义

我想读者你可能听说过.net framework这个概念

没错,我们将要说的framework也和这个framework差不多

所不同的是.net framework的竞争对象是j2ee那一系列标准

而我们将要说到的几个框架则应用在j2ee的不同层面

单就单个框架而言,没有.net framework管得那么多

但是却要比它精专多了,而且总量加起来,也远比微软那一套框架要广泛得多

回到正题,框架是什么?

软件工程之所以被叫做软件工程就是因为有那么一批人觉得可以用工程学里面

那些管理Project的方法来管理软件从开发到维护这一系列流程

那么在建筑工程里面框架是什么?

现在建筑多采用钢筋混凝土结构,注意里面一个很重要的词汇:钢筋

托福阅读中曾有一题听力就是关于钢筋结构的诞生,在美国

恩,现代建筑中多在建筑起来之前,先用钢筋搭建出一个框架出来

然后往钢筋中间填入混凝土,从而形成一个完成的建筑

而今天要说到的框架就是这么一个东西在每一个软件中间的实现

框架就是那么一个通过预先写好代码从而帮我们建立起一个软件结构的这么一个东西


这里提一下框架与规范//主要指J2ee规范也就是官方标准的区别

从某种意义上说,J2ee规范本身就是一个框架

无论是web容器也好,还是ejb容器也好,它们都开发了一部分通用的代码

并且帮助我们搭建起来了一个软件结构,我们要做的就是往里面填入组件

比如ejb/servlet/jsp等等

没错,要这么理解也没错,但是为了避免混乱,我们还是严格区分开来

本文中将要提到的框架如无特别说明,就是指的是非官方标准的框架

规范是规范,而框架是建立在规范之上的一种东西

可以说是标准的延续,或者说是民间的尝试,总之是这么一个非官方的东西

说到这里顺便提一下JCP组织也就是Java Community Process/Java社区

当初Sun公司在java发布之初,为了提倡开源和共项

同时也出于一个提出合理的标准的目的,而让广大的开发者参与标准的制定

而成立了这样一个社区,现在还健在,网址是
jcp.org
每一个新的规范发布之前都会在这个社区广泛讨论,最终对规范的制定产生巨大的影响

其中就包括企业级的参与者,相当有名的JBoss以及我国的金碟公司都是其中的成员


下面介绍一下几个相当著名的框架,必须要指出的是,虽然框架大多开源但并不代表所有的框架都开源,比如.net framework,但是java框架大多数开源

言归正传

Struts

表示层框架,名字来源于飞机的金属框架
可能有读者会提问了

表示层不是客户端么?

没错,但是语言这东西,众口烁金,别人都这么说你就不好不这么说了

最早表示层说的是客户端,后来随着时间的发展

人们也把服务器端直接与客户端//比如
IE
打交道的那部分也称为表示层
//JSP+Servlet
那么表示层框架是干什么的呢?

早先大规模应用JSP的时候,人们发现,JSP里面充斥着逻辑代码与数据

可读性极差,于是人们借用很早很早以前的MVC模式的思想

把表示层组件分为V-Viewer,也就是
JSP
M-Model
模型,一般来说是一个
JavaBean
C-Controller
控制器,一般来说是一个Servlet

所有人通过JSP和服务器打交道,发送请求,Viewer把这个请求转发给
Controller
Controller
通过调用一个Model来处理该请求,然后返回数据到
Viewer
这么一个过程,从而达到数据与逻辑的剥离,增强代码可读性,降低维护成本

而帮助人们实现这一系列东西的就是Struts框架,就是这么一个东西

Struts
的竞争对手主要是产商们极力倡导的JSF也就是
Java Server Faces
但是由于Struts出道时间早,所以应用比较多

JSF
则是产商们大力支持,前景看好

对于这一层来说,在JSPhtml代码中出现的java语句越少越好

因为java代码越少说明页面处理的业务逻辑越少,也越合理

这也是Struts最初的目的,记住这话
Spring大名鼎鼎的Spring框架
有人曾说 2005年一片叫春之声,指的就是该框架
Spring
起源于 Rod Johnson的《 Expert One-on-One J2EE Design and Development》一书
Rod Johnson
认为, J2ee里面的那一套 //尤其是 ejb
太重了,对于单机的系统来说,没有必要使用那么复杂的东西
于是就开始设计并引导 Spring小组开发出这样一个构架
不能不说他是个天才,因为的的确确不是所有的系统都是跨多服务器的
没有必要把一个简单的系统设计得那么复杂 //天才的那几个共性又体现出来了
Spring
从诞生之日起就是针对EJB的,力争在不少应用上取代 EJB
而它也确实达到了这个目的
现在包括 WebLogic等主流应用服务器还有主流 IDE都开始逐渐接受该框架
并提供相应支持
提到Spring就不能不说控制反转 Ioc//Inversion of Control
和依赖注射DI//Dependency Injection

什么叫控制反转呢?
套用好莱坞的一句名言就是:你呆着别动,到时我会找你。
什么意思呢?就好比一个皇帝和太监
有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女
皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女
其它一切都交由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上
这就是控制反转,而把美女送到皇帝的寝宫里面去就是注射
太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙床上去
整个后宫可以看成是Spring框架,美女就是Spring控制下的JavaBean

而传统的模式就是一个饥渴男去找小姐出台
找领班,帮助给介绍一个云云,于是领班就开始给他张罗
介绍一个合适的给他,完事后,再把小姐还给领班,下次再来
这个过程中,领班就是查询上下文 Context,领班的一个职能就是给客户找到他们所要的小姐
这就是 lookup()方法,领班手中的小姐名录就是 JNDI//Java Naming and Directory Interface
小姐就是 EJB,饥渴男是客户端,青楼是 EJB容器
看到区别了么?饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去
而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了
而不是皇帝,必要时候由太监给注射进去就可以了
看到 Spring的美妙了吧, Spring还提供了与多个主流框架的支持
可以和其它开源框架集成
Hibernate
名字取材自ORM最早的一句玩笑话//ORM就是 OR-Mapping
说用了ORM之后,程序员就可以去冬眠了,而不需要操心那么多事

这里不得不说的是,该框架由于做得太好,以至于被 J2ee招安,成为 EJB3.0的一部分
替代原有 EJB2.X里面关于 Entity Bean而成为 EJB ORM的工具
这里解释一下 ORM//OR-Mapping
中文名 对象关系映射
什么意思呢?我们知道传统的数据库都是关系型的
一条条记录以表格的形式储存,而表与表之间充斥着是关系 /关联
比如说一个人,名字 zhaoce,性别男,年龄 23那么数据库中是这么储存的
姓名性别年龄 zhaoce m 23 某女    f 22
而实际应用服务器中的实体都是以对象的形式存在,一个个对象
zhaoce
是以这种形式存在的
Human human=new Human();
human.setName("zhaoce")
human.setSex("m");
human.setAge(23);
这样的,那么我们知道,传统的 JDBC是通过一个二维字符串将数据取出
需要我们自己将其包装成对象,在存入的时候,我们还需要将对象拆开
放入 sql语句中 //Insert into Huamn values('zhaoce','m',23)
然后执行该 sql语句
太麻烦太麻烦, ORM理念的提出改变了这一切, ORM认为,这些东西应该由框架来做
而不是程序员,程序员做他该做的,不要为这种破事分心,还测试半天

于是就出现了Hibernate
JDOTopLink等等,甚至 .net里面也有 ADO.net
过去一段时间是 HibernateJDO争风,现在看来 Hibernate逐渐成为主流并被官方接纳
成为规范标准之一,替代掉原来 EJB2.XORM EntityBean
TopLink
则是 Oracle公司推出和 Oracle数据库结合的一种 ORM
商业用软件,贵且复杂,不过正在逐渐开放
而象表示层一样,这一种专门面对数据层的代码也被称为数据持久层
所以数据持久层这一概念有时不仅仅指代数据库
关于 ORM,最高的境界应该是在 java代码中不出现任何一句的 sql语句
注意,是不包括 sql语句, Hibernatehql以及 ejbejb-ql不算在内
至于出现不出现 hql/ejb-ql等替代 ql,这要视具体情况而定,不过最好也是不出现
当然最后所说的过分理想的情况往往不现实, 总之一句话
sql为代表的ql/*还有hql,ejbql*/语句在代码中出现得越少越好

记住这话,现在未必能够理解,学了以后就懂了

这三个是目前最为常用的框架而目前光已公布的框架就 >500
还在不停增加中,不可能一一列举,有兴趣的可以去看相应文档要指出的是框架不是应用程序
只是一堆组件的有序复合,应用时不能脱离于应用服务器单独存在

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值