﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-laure-文章分类-struts2</title><link>http://www.blogjava.net/laure/category/39188.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 06 May 2009 15:30:31 GMT</lastBuildDate><pubDate>Wed, 06 May 2009 15:30:31 GMT</pubDate><ttl>60</ttl><item><title>为什么用注解配置</title><link>http://www.blogjava.net/laure/articles/268594.html</link><dc:creator>一半是海</dc:creator><author>一半是海</author><pubDate>Sat, 02 May 2009 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/laure/articles/268594.html</guid><wfw:comment>http://www.blogjava.net/laure/comments/268594.html</wfw:comment><comments>http://www.blogjava.net/laure/articles/268594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/laure/comments/commentRss/268594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/laure/services/trackbacks/268594.html</trackback:ping><description><![CDATA[
<pre>


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而

让配置反而变复杂了，值得吗。难道只是为了和别人吹嘘&#8220;hi，知道吗，我们现在连事务也使用annotation来实现了&#8221;。我们最想要的不是把这些公用的东西整到

annotation里去，而是要把一些独用的东西放进去，比如说struts中的action定义，hibernate中po的配置，还有一个目前最想要的是spring的bean定义，这些东西可以

放到annotation里去。



Annotation不是万能钥匙，不能解开所有的锁，大家也不要对它过度崇拜，一个优秀的软件工程师不只是不断的学习，更需要的是正确的判断在何种场景下需要选择何

种技术，一般说来一种技术越强大，那么它的局限性就越高，所以通常我们会选择其他的技术来和它互补，在配置文件界，我们可以说annotation很好很强大，但是我

们不要忘了xml也是很好的，也是很强大的，而且他们是互补的。

</pre>


<img src ="http://www.blogjava.net/laure/aggbug/268594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/laure/" target="_blank">一半是海</a> 2009-05-02 11:11 <a href="http://www.blogjava.net/laure/articles/268594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>