为什么用注解配置



Xml和annotation都是我们在项目中常用到的技术,尤其是在配置文件这一块。很久很久以前,当jdk5.0还没有出来的时候,或者我们还没有大规模换到jdk5.0的时

代,xml作为配置文件是大行其道,但是当annotation诞生之后,形式有所转变,曾经发挥巨大功能的xml开始被人们所批斗了,现下人们对annotation开始了疯狂的崇

拜。






那么就先说说xml的功与过,他的功我们都看在心里,就拿以前最常见的技术来说吧,struts+spring+hibernate,哪一个不用配置文件,使用配置文件谁不用xml,虽然

hibernate还支持property文件配置,但是很显然,那玩意儿更不易读(可能还有人说,我用xdoclet了, 可是这个东东用的人是非常之少的)。于是我们看到我的项目

里到处都是xml配置文件,从struts,到hibernate,而且尤其是struts和hibernate,一个中型项目,struts的xml配置文件有时候达到数万行,再大一点的,可以数十

万行,虽然很多时候都是拷贝,粘贴,但是看这个这个数十个几千行的struts配置文件能不让人倒胃口吗。再说那个hbm.xml,大家再熟悉不过了,你想想吧,一个几域

模型的项目里,你需要有多少配置文件,我眼睛都看花了。这些都是xml的缺点。但是xml也有优点,比如我要做一个通用的配置,象spring里的声明式事务管理之类,

那么所有的需要事务管理的bean,我只要一段配置文件或者很少几段配置文件就可以解决,这个配置不会超过50行。



那么再看看配置文件界的后起之秀吧,话说自打annotation出来之后,众人犹如众星捧月一般,把这玩意举上神坛,每日供奉,于是呼出来一批基于annotation的mvc框

架,我们看看最常用的一个吧,struts2.0里也可以使用annotation来实现result的配置,我们看看它是怎么做的:




首先:指定action的package目录。




其次:根据上面指定的目录下的action的名字来声明url,这样struts2.0可以根据url自动找到需要执行的action的方法。




第三:根据方法上声明的annotation来返回对应的页面。



Struts2.0的这个零配置就是使用coc和annotation来实现的,很简单吧,但是虽然简单,功效却非常之大,这样struts.xml中的action的配置全部都可以拿掉了,配置

文件就会变的非常之简单。然后我们在维护或者开发的时候,第一时间就可以知道这个方法会返回哪些页面(曾经我在webwork2上也实现了同样的功能),而在从前,

我们不得不去xml配置文件中ctrl+f来寻找,就这一点就节省了很多的时间,同时xml配置文件中的配置也所剩无几,剩下的都是一些公用的配置。我们再看hibernate

呢,hibernate3.2支持annotation,而且在新项目中我一直使用annotation来配置我们的po,我们得到的好处就是我们再也看不到hbm文件了,我直接就可以看到某个po

属性的配置,可以这么说在这个地方用得是恰到好处,给我们带了不少方便。问题是annotation是万能的吗,我需要把struts.xml文件全部去掉吗,我要把事务的配置

都写道类里面去吗,如果我们这样做了,我相信实现annotation的人一定会哭了。



举个例子吧,spring2.0支持使用annoation来配置事务,我看了一下,发现如果我们用annotation来配置事务,事务的传播途径,是否只读之类的配置我们需要写上很

多遍才行,而事实上,大多数方法的事务需求是一样的,即使有一些不一样,我们也可以通过多配两个transactionAttribute就可以实现,我们为了使用annotation而

让配置反而变复杂了,值得吗。难道只是为了和别人吹嘘“hi,知道吗,我们现在连事务也使用annotation来实现了”。我们最想要的不是把这些公用的东西整到

annotation里去,而是要把一些独用的东西放进去,比如说struts中的action定义,hibernate中po的配置,还有一个目前最想要的是spring的bean定义,这些东西可以

放到annotation里去。



Annotation不是万能钥匙,不能解开所有的锁,大家也不要对它过度崇拜,一个优秀的软件工程师不只是不断的学习,更需要的是正确的判断在何种场景下需要选择何

种技术,一般说来一种技术越强大,那么它的局限性就越高,所以通常我们会选择其他的技术来和它互补,在配置文件界,我们可以说annotation很好很强大,但是我

们不要忘了xml也是很好的,也是很强大的,而且他们是互补的。

posted on 2009-05-02 11:11 一半是海 阅读(416) 评论(0)  编辑  收藏 所属分类: struts2


只有注册用户登录后才能发表评论。


网站导航:
 
<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

留言簿

文章分类

文章档案

搜索

最新评论