<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>DigitalSonic的自留地</title>
    <description></description>
    <link>http://digitalsonic.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Spring Framework 2.5 Reference中文版正式发布</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/209974" style="color:red;">http://digitalsonic.javaeye.com/blog/209974</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><span style="font-size: small;">声明</span> </strong><br />Spring中文参考手册得到Spring Framework开发团队的直接授权和大力的支持，其目的是在中文世界推广优秀的开源技术。本次翻译活动由满江红开放技术研究组织(<a href="http://www.redsaga.com" target="_blank">http://www.redsaga.com</a> )和Spring中文论坛(<a href="http://spring.jactiongroup.net" target="_blank">http://spring.jactiongroup.net</a> ) 共同发起、组织。我们在此郑重宣布，本次翻译遵循原Spring Framework的授权协议，即Apache 2.0协议。在完整保留全部文本(包括本版权页)，并且不违反Apache 2.0协议的前提下，允许和鼓励任何人进行全文转载及推广，所有参与人员放弃除署名权外的一切权利。<br /><br /><strong><span style="font-size: small;">致谢</span> </strong><br />如此庞大的项目不是一两个组织可以独立完成的，就像Spring本身一样，涵盖了Java技术的方方面面。因为有了大家的关心和支持才使此次项目能够顺利完成。有理由相信，中文开源世界必将在不久的将来展现出更广阔的发展空间，希望大家都能为推动中国软件发展奉献出自己的一份力量。<br /><br />项目主页：<br /><a href="http://wiki.redsaga.com/confluence/display/Spring2/Spring2.5" target="_blank">http://wiki.redsaga.com/confluence/display/Spring2/Spring2.5</a> <br /><br />在线版本：<br /><a href="http://www.redsaga.com/spring_ref/2.5/html/" target="_blank">HTML</a> / <a href="http://www.redsaga.com/spring_ref/2.5/html_single/" target="_blank">HTML Single</a> <br /><br />下载地址：<br /><a href="http://www.redsaga.com/spring_ref/2.5/spring-reference.pdf" target="_blank">PDF(593页，4.41MB)</a> / <a href="http://www.redsaga.com/spring_ref/2.5/Spring-Reference_zh_CN.chm" target="_blank">CHM(2.08MB)</a> <br /><br />勘误表：<br /><a href="http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=3171" target="_blank">http://wiki.redsaga.com/confluence/pages/viewpage.action?pageId=3171</a> </p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/209974#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 00:01:54 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/209974</link>
        <guid>http://digitalsonic.javaeye.com/blog/209974</guid>
      </item>
      <item>
        <title>《Web开发大全—ROR版》推荐序</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204842" style="color:red;">http://digitalsonic.javaeye.com/blog/204842</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天你Rails了吗？如果还没有，那请找个机会好好体验一下，你一定会在将来的某一天为自己做出的这个明智的决定而感到庆幸。</p>
<p>记得曾经看到过这么一张图，左边放了一堆Java的书，数数居然有16本之多，而右边的书却只有两本&mdash;&mdash;《Programming Ruby》和《Agile Web Development with Rails》。如果做同一件事，给你两个选择，前者需要你看16本砖头一样的书，后者只需要看两本，而出来的效果又差不多，相信这个选择并不会太难。</p>
<p>其实那个时候，我所知道的与Ruby和Rails相关的书籍也就这么两本，可现在，随着Ruby on Rails人气的不断上升，想找一本相关的图书已经不再是件费力的事情了。除了上面提到的两本经典之作外，还有很多别的选择。如果你和我一样不是很擅长&ldquo;啃砖&rdquo;，那这本《Web开发大全&mdash;&mdash;ROR版》也许会是个不错的选择。书中并没有死板地讲述语法，没有枯燥地罗列知识点，全书都从实际应用出发，通过一个个真实的例子，能够运行的程序来告诉你Ruby on Rails其实就这么简单。</p>
<p>本书的每个章节都关注于实际网站开发时的某个具体问题，在给出解决方案的同时也会对相关的内容进行介绍，让读者能根据自己的情况做出最合适的选择。除此之外，书中还涉及到了目前比较流行的一些技术和理念，能够将REST、Mashup运用于实际的Web项目中是一件令人激动的事情。</p>
<p>用Ruby写程序有如闲庭信步，因为它是从一个程序员的角度来考虑问题的，《Web开发大全&mdash;&mdash;ROR版》也是如此，是一本开发者写给开发者的书籍，加之本书的作者们都是圈内知名的高手，这更让我相信本书值得一读，你还在犹豫什么呢？</p>
<p align="right">2008年6月8日

</p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204842#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 21:34:15 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204842</link>
        <guid>http://digitalsonic.javaeye.com/blog/204842</guid>
      </item>
      <item>
        <title>《JRuby语言实战技术》书评</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204843" style="color:red;">http://digitalsonic.javaeye.com/blog/204843</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Martin Fowler曾建议每年学习一种新语言，这样能让自己从不同的角度去思考问题。听起来很不错，但是我没能做到，感觉有那么点惭愧。自己曾使用过不少语言，最终将Java作为自己最常用的语言，我不太喝咖啡，但生活中却充满了&ldquo;咖啡因&rdquo;。在懒惰了一段时间后，我接触到了Ruby，Rails的大红大紫让很多Java社区中的大牛们蠢蠢欲动，几乎使用过的人都对它赞不绝口，所以我也就与时俱进地赶了次潮流。</p>
<p>作为一个Java开发者，在最初使用Ruby时总会有这样那样的不适应，即便是习惯了之后，还是会遇到一些问题。比如，Java背后有着庞大的社区，需要什么功能，几乎总能找到合适的库，无论是开源的还是商业的，但Ruby在这方面就有些欠缺了。现在有了JRuby，一切都变得不同了，它让原本有着天壤之别的Java和Ruby不再那么泾渭分明。你完全可以放心大胆地用Ruby进行开发，当遇到问题时退回Java，开发完毕后再把项目部署到Java EE环境中去&hellip;&hellip;</p>
<p>在我翻译《JRuby实战》（原名《Practical JRuby on Rails Web 2.0 Projects》）的时候，得知骆老师正在编写一本JRuby的原创书，当时就对这本书很是期待，原因有两点。其一，骆老师是Rails方面的专家，他的喜道技术日记在我学习Ruby和Rails给了我很多帮助，所以骆老师就是本书质量最好的保障；其二，到目前为止，《Practical JRuby on Rails Web 2.0 Projects》是全世界唯一的一本JRuby相关书籍，作者是JRuby核心团队的Ola Bini，而第二本原创书籍便能由一名活跃在中文社区的华人专家来编写，这将大大有利于JRuby在中文世界的推广。</p>
<p>《JRuby实战》偏向于在Ruby on Rails环境中使用JRuby，全书用4个项目介绍如何最大程度地利用Java的资源来弥补Ruby本身的一些不足。相比之下，骆老师的《JRuby语言实战技术》则更关注Ruby及JRuby本身，除了JRuby的特性外，还留出了一定的篇幅介绍Ruby的基础知识，书中的范例相对独立，不少还是非常有用的小工具，很具实用价值&hellip;&hellip;</p>
<p>无论你是一名Java开发者，还是Ruby爱好者，或者是刚刚接触程序设计的新人，本书都能让你有所收获。相信当Java遇到Ruby，世界会变得更加精彩。</p>
<p goog_docs_charindex="1188" class="western" id="f4ro99" align="right" style="MARGIN-BOTTOM: 0in; TEXT-INDENT: 0.29in">2008<font goog_docs_charindex="1193" id="f4ro100" face="宋体, SimSun"><span goog_docs_charindex="1194" id="f4ro101" lang="zh-CN">年</span></font>6<font goog_docs_charindex="1199" id="f4ro102" face="宋体, SimSun"><span goog_docs_charindex="1200" id="f4ro103" lang="zh-CN">月</span></font></p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204843#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 21:27:15 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204843</link>
        <guid>http://digitalsonic.javaeye.com/blog/204843</guid>
      </item>
      <item>
        <title>《JRuby实战》译序</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204844" style="color:red;">http://digitalsonic.javaeye.com/blog/204844</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">记得以前在和朋友聊天时讲到自己最近在用Ruby写东西，他们大多会露出好奇的表情，问我什么是Ruby。可现在，这种情况应该不会出现了，Ruby on Rails早已成了人们讨论的热点，它也把Ruby带到了聚光灯下，越来越多的人开始使用Ruby，甚至爱上了这门语言。</font></p>
<p><font size="3">如果你是一个Java开发者，想在实际项目中尝试Ruby和Rails时肯定会有这样的问题：我有很多遗留的Java资源，比如EJB和Java库，怎么把它们用在新项目里，还是放弃它们？有些问题用Java的解决方案显然更好，能不能结合Ruby和Java呢？来试试JRuby吧，你会眼前一亮，谁说鱼与熊掌不可兼得？如果你是一个Ruby开发者，那最好也来看看JRuby，你会发现Java的世界一样很精彩。目前Rails缺少高可用性的解决方案，这是导致很多大流量网站不敢使用它的主要原因，而采用JRuby方式来部署，可以利用很多成熟的Java解决方案，解决他们的后顾之忧。</font></p>
<p><font size="3">本书的作者Ola Bini通过4个由浅入深的项目，结合Rails向读者介绍了JRuby的很多东西，例如，如何在Ruby中调用Java代码，如何使用Java库，如何实现并访问EJB，如何操作JMS，如何用JMX来管理Rails应用程序&hellip;&hellip;甚至可以在Java中调用由Ruby实现的Java类和接口，很神奇吧！此处给出的代码都很有实用价值，只需稍做加工就能放进真正的项目中发挥作用，要是你急需可以上手使用的东西，那本书就再合适不过了。</font></p>
<p><font size="3">本书最后的附录中整理了Ruby和JRuby的常用语法和一些别的东西，虽然比不上完整的参考手册，但这些内容应付日常事务应该绰绰有余了。</font></p>
<p><font size="3">大学时的翻译老师在课上曾多次叮嘱我们，翻译先时要忠于原文，表达出作者真实的想法，在此基础上再追求信、达、雅。不过碍于时间，加之本人水平有限，译文中还有很多不足之处，希望各位读者不吝指正。</font></p>
<p align="right"><font size="3">2008年3月</font></p>
<p align="left"><hr /></p>
<p align="left"><font size="3">《JRuby实战》（英文版名为《Practical JRuby on Rails Web 2.0 Projects》）的译者序，第一次一个人翻译下整本书，第一次写序言。在书即将出版时，将这篇译者序放上自己的博客，以做纪念。</font></p>
<p align="left"><font size="3"><img src="http://images.china-pub.com/ebook35001-40000/39930/shupi.jpg" alt="" /></font></p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204844#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 21:14:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204844</link>
        <guid>http://digitalsonic.javaeye.com/blog/204844</guid>
      </item>
      <item>
        <title>Step by Step-Turning Ruby Files into Java Classes</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/199480" style="color:red;">http://digitalsonic.javaeye.com/blog/199480</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>以前做了个Ruby的项目，最近有了点新的需求，其中有一条是要保护源代码，我选择用JRuby把rb文件编译为class，查了些资料，看了下jrubyc相关的一些代码，也许有朋友有类似的需要，和大家分享一下。突发奇想用英文来写，很久不写英文了，果然这个还得常写写。。。附上对应的中文，如果不高兴看英文的同学可以直接看中文的，呵呵。</p>
<p>&nbsp;</p>
<p>There are many reasons for us to turn Ruby files (.rb) into Java classes (.class). For example, you want a high-performance system, or you want to protect your ruby code, etc. Last year, JRuby finished its compiler which can help you to do the compilation. Now you&rsquo;ve got another choice besides XRuby. You can find some material on JRuby&rsquo;s Wiki, but it&rsquo;s far from enough, and the most pages you find on the Internet just compile some hello world programs. I tried to compile my ruby project (of course, it's more complex than printing "Hello World", it's a network traffic control script under FreeBSD) last week. If you have the same requirement, maybe my experience can give you a little help :-) <br />The first question is how to start the compiler. The Wiki just tells us to use "jrubyc". Actually, there's no jrubyc.bat or jubyc.exe in bin at all. So, if you are using Windows like me, you should start the script jrubyc manually. For example: </p>
<div class="quote_div">jruby %JRUBY_HOME%\bin\jrubyc &lt;rb&gt; </div>
<p>Suppose your program is very simple, please forgive me using "Hello World" again. (src\hello.rb)</p>
<pre name="code" class="ruby">p "Hello World"</pre>
<p>The command to compile it looks like this: </p>
<div class="quote_div">jruby %JRUBY_HOME%\bin\jrubyc src\hello.rb </div>
<p>Then, try this one to run it: </p>
<div class="quote_div">java -cp .;%JRUBY_HOME%\lib\jruby.jar ruby.src.hello </div>
<p>Have you feel something strange? Why the class is ruby.src.hello? After checking the command line parameters, you will find the answer. Here is the command pattern: </p>
<div class="quote_div">jrubyc [options] (FILE|DIRECTORY) </div>
<p>jrubyc has three parameters: <br /><br />
<table border="0">
<tbody>
<tr>
<td>-d,--dir DIR</td>
<td>Use DIR as the root of the compiled package and filename</td>
</tr>
<tr>
<td>-p,--prefix PREFIX</td>
<td>Prepend PREFIX to the file path and package. "ruby" is default </td>
</tr>
<tr>
<td>&nbsp;-t,--target TARGET</td>
<td>Output files to TARGET directory </td>
</tr>
</tbody>
</table>
<br />Now, try to compile the hello.rb again: </p>
<div class="quote_div">jruby %JRUBY_HOME%\bin\jrubyc -d src -p "" src\hello.rb <br />java -cp .;%JRUBY_HOME%\lib\jruby.jar hello </div>
<p>Next, find yourself some other Ruby files which have require or include or something else. Put them into a directory. Let's call it dir. Try the following command: </p>
<div class="quote_div">md classes <br />jruby %JRUBY_HOME%\bin\jrubyc -t classes -d dir -p "" dir </div>
<p>If everything goes right, you can check the classes directory. All the files are there. Since you require something outside the source files, don&rsquo;t forget to tell java where to find them. For example, your dir\complex_ruby_script required yaml. </p>
<div class="quote_div">java -cp .\classes;%JRUBY_HOME%\lib\jruby.jar;%JRUBY_HOME%\lib\ruby\1.8 complex_ruby_script </div>
<p>You should see the result of your Ruby program. Maybe I should say your Java program. <br /><br />That's all. If you want to compile your Rails project so as to deploy it into a Java EE application server, please check out GoldSpike and Warbler.</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/199480#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 02 Jun 2008 16:55:04 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/199480</link>
        <guid>http://digitalsonic.javaeye.com/blog/199480</guid>
      </item>
      <item>
        <title>面对灾难，我们万众一心</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204845" style="color:red;">http://digitalsonic.javaeye.com/blog/204845</a>&nbsp;
          发表时间: 2008年05月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>2008年5月12日，人们将永远记住这个日子，四川省发生了里氏8级大地震，很多人丧失了生命，失去了自己的家园。</p>
<p>自地震发生后就牵动了无数人的心，部队开进去了，抢险队进去了，医护人员进去了，总理也在第一时间去了&hellip;&hellip;全国的人民有钱出钱有力出力，中央电视台不间断地播放着特别节目，时刻传递着灾区的信息，看着那些画面，相信每个人都会为之动容。</p>
<p>现在我正一边看着央视的赈灾演出，一边敲击着键盘，写下这篇文章，这几天发生了太多感人的故事，我不想多说什么，祝福灾区的人民早日重建家园，汶川加油，四川加油，中国加油！！！</p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204845#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 18 May 2008 22:01:45 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204845</link>
        <guid>http://digitalsonic.javaeye.com/blog/204845</guid>
      </item>
      <item>
        <title>第一次参加TopCoder SRM，特此记录</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204846" style="color:red;">http://digitalsonic.javaeye.com/blog/204846</a>&nbsp;
          发表时间: 2008年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>昨天第一次参加了TopCoder SRM的比赛，果然不出所料，3题没有做完，只做了2道，动作还是有点慢，和高手的距离还很遥远啊。。。不过两题全部Passed System Test，也没被Challenge掉，呵呵。本来想Challenge别人的，可惜我那房间几乎全是用C++的，我用Java实现，估计那些人也没心思看我的，呵呵～</p>
<p>今天又打开了TopCoder Arena，发现自己居然有Rating了，一下子从白色变成了绿色，以后来看会有兴趣继续玩玩。</p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204846#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 04 May 2008 22:23:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204846</link>
        <guid>http://digitalsonic.javaeye.com/blog/204846</guid>
      </item>
      <item>
        <title>第一次用OWL-S API</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204848" style="color:red;">http://digitalsonic.javaeye.com/blog/204848</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>看了好久的论文，终于要开始动手实践了，虽然目标还不是很明确，但照着Demo做东西偶还是会滴。OWL-S API是专门用来处理OWL-S的一个Java开发包，自然是应该放在Java里用的，可是好久没有写JRuby了，所以第一次的小程序就用JRuby来写吧，哈哈～</p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">require&nbsp;</span><span style="COLOR: #800000">'</span><span style="COLOR: #800000">java</span><span style="COLOR: #800000">'</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />dir&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Dir.new(</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #800000">../lib</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #000000">)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />dir.each&nbsp;{&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">filename</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;$CLASSPATH&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #800000">../lib/#{filename}</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;filename&nbsp;</span><span style="COLOR: #000000">=~</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">.jar</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />}<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.mindswap.owl.OWLFactory<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.mindswap.owls.OWLSFactory<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.mindswap.query.ValueMap<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">exec</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;OWLSFactory.create_execution_engine()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />kb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;OWLFactory.create_kb()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />service&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;kb.read_service(</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #800000">http://www.mindswap.org/2004/owl-s/1.1/Dictionary.owl</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #000000">)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />process&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;service.get_process()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />input_value_map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ValueMap.new()<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />p&nbsp;</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #800000">pls&nbsp;input&nbsp;a&nbsp;word:</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />word&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;gets<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />input_value_map.set_data_value(process.get_input(</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #800000">InputString</span><span style="COLOR: #800000">&quot;</span><span style="COLOR: #000000">),&nbsp;word)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />output_value_map&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">exec</span><span style="COLOR: #000000">.execute(process,&nbsp;input_value_map)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;output_value_map.get_value(process.get_output())<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />p&nbsp;out.get_value();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>程序中先引入了JRuby的Java支持，随后将放在../lib目录中的OWL-S API所需的所有jar包引入Classpath，再导入程序中要使用的Java类，后面的操作就和OWL-S API的Demo中的差不多了。</p>
<p>OWL-S API：<a href="http://www.mindswap.org/2004/owl-s/api/">http://www.mindswap.org/2004/owl-s/api/</a><br />上文Demo：<a href="http://www.mindswap.org/2004/owl-s/api/doc/#exec">http://www.mindswap.org/2004/owl-s/api/doc/#exec</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204848#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 10:44:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204848</link>
        <guid>http://digitalsonic.javaeye.com/blog/204848</guid>
      </item>
      <item>
        <title>愚人节看到的两则IT界的玩笑</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204849" style="color:red;">http://digitalsonic.javaeye.com/blog/204849</a>&nbsp;
          发表时间: 2008年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>昨天愚人节，看到了两则愚人节的玩笑&nbsp;，很好，很强大。。。。</p>
<p>1、SpringSource宣布被微软收购（<a href="http://www.infoq.com/cn/news/2008/04/microsoft-springsource-purchase">http://www.infoq.com/cn/news/2008/04/microsoft-springsource-purchase</a>）</p>
<p>这意味着什么？Spring以后归微软了，发展方向要偏向.Net了。。。看着挺有模有样的，Rod Johnson还录了视频放YouTube上，InfoQ采访，不过真要这样之前怎么一点风声都没呢？霍泰稳在下面留了言：</p>
<p><hr /><span id="quote_20474">我们针对这一事件采访了微软中国的相关负责人，该不愿透漏姓名的人士告诉我们说：鉴于今天是个比较特殊的日子，微软官方暂不对此事发表评论，详情请关注微软的官方网站！ <br /><br />InfoQ中文站编辑 霍泰稳 </span><span><hr /></span></p>
<p>2、Google人肉搜索（<a href="http://www.google.cn/intl/zh-CN/renrou/index.html">http://www.google.cn/intl/zh-CN/renrou/index.html</a>）</p>
<p>这个做得就不怎么样了，我都没点搜索按钮，一看就觉得是假的。果不其然，点击之后连到了天涯问答，显示了这段文字：</p>
<p><hr />尊敬的用户，我们抱歉地通知您，由于信息晚到等原因，您刚刚使用的谷歌人肉搜索引擎不能正常启动。事实上，这是谷歌于公元2008年4月1日&ldquo;愚人节&rdquo;推出的让大家&ldquo;会心一笑 暂解烦忧&rdquo;的小笑话，在此谨祝大家&ldquo;愚人节&rdquo;快乐，天天快乐。 </p>
<p>如果您真的有问题需要社区用户或网友帮忙解决，不妨试用由谷歌提供技术支持的天涯问答。在天涯问答，您所提出的每一个问题都将得到热心网友的帮助，相信您一定能获得满意的答复。<hr /></p>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204849#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Apr 2008 20:48:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204849</link>
        <guid>http://digitalsonic.javaeye.com/blog/204849</guid>
      </item>
      <item>
        <title>Spring MVC快速上手教程</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204850" style="color:red;">http://digitalsonic.javaeye.com/blog/204850</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Spring Framework可以被使用在很多场合之中，考虑到目前大多数Java EE的项目是B/S结构的，所以这里的快速上手教程会以Spring MVC为切入点，用最简单的代码一步一步来实现一个图书列表的页面。</p>
<p>在正式动手之前需要做一些准备工作，先安装并设置好JDK 1.5和Tomcat 5，关于数据库及其访问方式可以根据个人习惯进行选择，教程中使用MySQL数据库和Hibernate（映射由Hibernate Annotation实现）。请将实际使用到的jar文件复制到WEB-INF/lib目录中，整个项目的结构见图1，教程中用到的jar文件见图2。</p>
<p><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/dingx/279098/o_springmvc%20demo%e7%bb%93%e6%9e%84.jpg" alt="结构及用到的Jar文件" /></p>
<p>项目中的Bean定义分散在多个XML文件中，每完成一部分代码就给出相应的配置，最后再进行整合和部署。配置中使用default-autowire=&quot;byName&quot;实现了Bean的自动织入，节省了很多个工作量，只需注意Bean及属性的命名即可。</p>
<h3>Step 1.Business Objects &amp; DAO</h3>
<p>教程中的例子涉及到两个实体对象，代表文章的Article类和代表作者的Author类，分别对应了数据库中的article表和author表，一篇文章有一个作者，而一个作者可以有多篇文章。类的代码如下（省略getter和setter）：</p>
<p><em><strong>代码：Article.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.model;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.persistence.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />@Entity<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_79_213_Open_Image" onclick="this.style.display='none'; document.getElementById('_79_213_Open_Text').style.display='none'; document.getElementById('_79_213_Closed_Image').style.display='inline'; document.getElementById('_79_213_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_79_213_Closed_Image" onclick="this.style.display='none'; document.getElementById('_79_213_Closed_Text').style.display='none'; document.getElementById('_79_213_Open_Image').style.display='inline'; document.getElementById('_79_213_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Article&nbsp;</span><span id="_79_213_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_79_213_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Id<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Long&nbsp;id;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;title;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@ManyToOne<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Author&nbsp;author;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span></div>
</div>
<p><em><strong>代码：Author.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.model;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.List;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.persistence.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />@Entity<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_101_243_Open_Image" onclick="this.style.display='none'; document.getElementById('_101_243_Open_Text').style.display='none'; document.getElementById('_101_243_Closed_Image').style.display='inline'; document.getElementById('_101_243_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_101_243_Closed_Image" onclick="this.style.display='none'; document.getElementById('_101_243_Closed_Text').style.display='none'; document.getElementById('_101_243_Open_Image').style.display='inline'; document.getElementById('_101_243_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Author&nbsp;</span><span id="_101_243_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_101_243_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Id<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@GeneratedValue<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;Long&nbsp;id;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;name;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@OneToMany<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;articles;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>在MySQL中创建数据表的SQL语句如下，数据请自行添加（如果使用Hibernate，表可以根据映射自动生成，具体做法请参考Hibernate文档）：</p>
<p><em><strong>代码：数据库创建SQL</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">CREATE</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">DATABASE</span><span style="COLOR: #000000">&nbsp;`articles`&nbsp;</span><span style="COLOR: #0000ff">DEFAULT</span><span style="COLOR: #000000">&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">CHARACTER</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">SET</span><span style="COLOR: #000000">&nbsp;utf8&nbsp;COLLATE&nbsp;utf8_general_ci;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">USE</span><span style="COLOR: #000000">&nbsp;articles;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">CREATE</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">TABLE</span><span style="COLOR: #000000">&nbsp;`article`&nbsp;(<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;`id`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">bigint</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">20</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">NOT</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;auto_increment,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;`title`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">varchar</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">100</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">NOT</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">''</span><span style="COLOR: #000000">,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;`author_id`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">bigint</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">20</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">NOT</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #ff0000">0</span><span style="COLOR: #ff0000">'</span><span style="COLOR: #000000">,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="COLOR: #0000ff">PRIMARY</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">KEY</span><span style="COLOR: #000000">&nbsp;&nbsp;(`id`)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />)&nbsp;ENGINE</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">MyISAM&nbsp;</span><span style="COLOR: #0000ff">DEFAULT</span><span style="COLOR: #000000">&nbsp;CHARSET</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">utf8;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">CREATE</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">TABLE</span><span style="COLOR: #000000">&nbsp;`author`&nbsp;(<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;`id`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">bigint</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">20</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">NOT</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;auto_increment,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;`name`&nbsp;</span><span style="FONT-WEIGHT: bold; COLOR: #000000">varchar</span><span style="COLOR: #000000">(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">100</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #808080">NOT</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">NULL</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #ff0000">''</span><span style="COLOR: #000000">,<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;</span><span style="COLOR: #0000ff">PRIMARY</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">KEY</span><span style="COLOR: #000000">&nbsp;&nbsp;(`id`)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />)&nbsp;ENGINE</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">MyISAM&nbsp;</span><span style="COLOR: #0000ff">DEFAULT</span><span style="COLOR: #000000">&nbsp;CHARSET</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">utf8;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>考虑到可能会有多种DAO的实现，所以在DAO层先定义一个IArticleDao接口，随后可以自由选择具体的实现方式，此处结合Spring的HibernateDaoSupport使用Hibernate来进行实现：</p>
<p><em><strong>代码：IArticleDao.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.dao;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.List;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.model.Article;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_100_146_Open_Image" onclick="this.style.display='none'; document.getElementById('_100_146_Open_Text').style.display='none'; document.getElementById('_100_146_Closed_Image').style.display='inline'; document.getElementById('_100_146_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_100_146_Closed_Image" onclick="this.style.display='none'; document.getElementById('_100_146_Closed_Text').style.display='none'; document.getElementById('_100_146_Open_Image').style.display='inline'; document.getElementById('_100_146_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;IArticleDao&nbsp;</span><span id="_100_146_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_100_146_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;loadAllArticles();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p><em><strong>代码：ArticleDao.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.dao;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.List;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.model.Article;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_216_383_Open_Image" onclick="this.style.display='none'; document.getElementById('_216_383_Open_Text').style.display='none'; document.getElementById('_216_383_Closed_Image').style.display='inline'; document.getElementById('_216_383_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_216_383_Closed_Image" onclick="this.style.display='none'; document.getElementById('_216_383_Closed_Text').style.display='none'; document.getElementById('_216_383_Open_Image').style.display='inline'; document.getElementById('_216_383_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ArticleDao&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;HibernateDaoSupport&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;IArticleDao&nbsp;</span><span id="_216_383_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_216_383_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">unchecked</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">)<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_297_380_Open_Image" onclick="this.style.display='none'; document.getElementById('_297_380_Open_Text').style.display='none'; document.getElementById('_297_380_Closed_Image').style.display='inline'; document.getElementById('_297_380_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_297_380_Closed_Image" onclick="this.style.display='none'; document.getElementById('_297_380_Closed_Text').style.display='none'; document.getElementById('_297_380_Open_Image').style.display='inline'; document.getElementById('_297_380_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;loadAllArticles()&nbsp;</span><span id="_297_380_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_297_380_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">)getHibernateTemplate().loadAll(Article.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>接下来对Hibernate进行相应的配置，如果使用了JDO或者iBatis，请参考Spring文档。applicationContext-dao.xml内容如下：</p>
<p><em><strong>代码：applicationContext-dao.xml</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml&nbsp;version=&quot;1.0&quot;&nbsp;encoding=&quot;UTF-8&quot;</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">=&quot;http://www.springframework.org/schema/beans&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="COLOR: #0000ff">=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="COLOR: #0000ff">=&quot;http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;default-autowire</span><span style="COLOR: #0000ff">=&quot;byName&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;DAO配置于此&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=&quot;articleDao&quot;</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">=&quot;demo.dao.ArticleDao&quot;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;数据源&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;JNDI数据源&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id=&quot;dataSource&quot;&nbsp;class=&quot;org.springframework.jndi.JndiObjectFactoryBean&quot;&gt;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name=&quot;jndiName&quot;&nbsp;value=&quot;${datasource.jndi.name}&quot;/&gt;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;JDBC数据源&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=&quot;dataSource&quot;</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">=&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span><span style="COLOR: #ff0000">&nbsp;destroy-method</span><span style="COLOR: #0000ff">=&quot;close&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;driverClassName&quot;</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">=&quot;${datasource.jdbc.driverClassName}&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;url&quot;</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">=&quot;${datasource.jdbc.url}&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;username&quot;</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">=&quot;${datasource.jdbc.username}&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;password&quot;</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">=&quot;${datasource.jdbc.password}&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;使用Annotation映射的sessionFactory&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=&quot;sessionFactory&quot;</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">=&quot;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;dataSource&quot;</span><span style="COLOR: #ff0000">&nbsp;ref</span><span style="COLOR: #0000ff">=&quot;dataSource&quot;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;hibernateProperties&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop&nbsp;</span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">=&quot;hibernate.dialect&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${hibernate.dialect}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop&nbsp;</span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">=&quot;hibernate.show_sql&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${hibernate.show_sql}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop&nbsp;</span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">=&quot;hibernate.cache.use_query_cache&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${hibernate.cache.use_query_cache}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">prop&nbsp;</span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">=&quot;hibernate.cache.provider_class&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">${hibernate.cache.provider_class}</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">prop</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">props</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;annotatedClasses&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">demo.model.Article</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">demo.model.Author</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;事务管理器，此处为Hibernate的事务管理器&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=&quot;transactionManager&quot;</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">=&quot;org.springframework.orm.hibernate3.HibernateTransactionManager&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>此处如果使用JNDI提供数据源，请根据注释进行调整。Spring的事务管理需要声明事务管理器，由于Hibernate、JDO、JDBC的事务管理器都不一样，所以将其与其他事务的配置分开存放。此外，配置中的一些参数使用了占位符（形如${}），这些内容将在Step 4中进行加载。</p>
<h3>Step 2.Service</h3>
<p>Service层只是调用DAO中的方法为控制器提供图书列表，Service最好能先给出接口，随后进行实现，但此处的功能比较简单，就直接进行实现了：</p>
<p><em><strong>代码：ArticleService.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.service;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.List;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.dao.IArticleDao;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.model.Article;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_131_371_Open_Image" onclick="this.style.display='none'; document.getElementById('_131_371_Open_Text').style.display='none'; document.getElementById('_131_371_Closed_Image').style.display='inline'; document.getElementById('_131_371_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_131_371_Closed_Image" onclick="this.style.display='none'; document.getElementById('_131_371_Closed_Text').style.display='none'; document.getElementById('_131_371_Open_Image').style.display='inline'; document.getElementById('_131_371_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ArticleService&nbsp;</span><span id="_131_371_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_131_371_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;IArticleDao&nbsp;articleDao;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_217_268_Open_Image" onclick="this.style.display='none'; document.getElementById('_217_268_Open_Text').style.display='none'; document.getElementById('_217_268_Closed_Image').style.display='inline'; document.getElementById('_217_268_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_217_268_Closed_Image" onclick="this.style.display='none'; document.getElementById('_217_268_Closed_Text').style.display='none'; document.getElementById('_217_268_Open_Image').style.display='inline'; document.getElementById('_217_268_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;loadAllArticles()&nbsp;</span><span id="_217_268_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_217_268_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;articleDao.loadAllArticles();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_325_369_Open_Image" onclick="this.style.display='none'; document.getElementById('_325_369_Open_Text').style.display='none'; document.getElementById('_325_369_Closed_Image').style.display='inline'; document.getElementById('_325_369_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_325_369_Closed_Image" onclick="this.style.display='none'; document.getElementById('_325_369_Closed_Text').style.display='none'; document.getElementById('_325_369_Open_Image').style.display='inline'; document.getElementById('_325_369_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setArticleDao(IArticleDao&nbsp;articleDao)&nbsp;</span><span id="_325_369_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_325_369_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.articleDao&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;articleDao;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<p>Spring通过setArticleDao方法为ArticleService注入DAO，也可以选择通过构造方法注入，2.5中还能用@Autowired进行注入。</p>
<p>applicationContext-services.xml内容如下：</p>
<p><em><strong>代码：applicationContext-services.xml</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml&nbsp;version=&quot;1.0&quot;&nbsp;encoding=&quot;UTF-8&quot;</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">=&quot;http://www.springframework.org/schema/beans&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="COLOR: #0000ff">=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="COLOR: #0000ff">=&quot;http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="COLOR: #ff0000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;default-autowire</span><span style="COLOR: #0000ff">=&quot;byName&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;Service配置于此&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">=&quot;articleService&quot;</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">=&quot;demo.service.ArticleService&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
<h3>Step 3.Controller &amp; View</h3>
<p>Spring MVC提供了多种实现控制器的方式，此处直接实现Controller接口，开发一个单一动作的简单控制器，从Service中取得图书列表，提供给视图进行呈现，ListArticleController内容如下：</p>
<p><em><strong>代码：ListArticleController.java</strong></em></p>
<div style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 95%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;demo.controller;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.List;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.springframework.web.servlet.ModelAndView;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.springframework.web.servlet.mvc.Controller;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.model.Article;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;demo.service.ArticleService;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" id="_374_832_Open_Image" onclick="this.style.display='none'; document.getElementById('_374_832_Open_Text').style.display='none'; document.getElementById('_374_832_Closed_Image').style.display='inline'; document.getElementById('_374_832_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" id="_374_832_Closed_Image" onclick="this.style.display='none'; document.getElementById('_374_832_Closed_Text').style.display='none'; document.getElementById('_374_832_Open_Image').style.display='inline'; document.getElementById('_374_832_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ListArticleController&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;Controller&nbsp;</span><span id="_374_832_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_374_832_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;ArticleService&nbsp;articleService;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_537_710_Open_Image" onclick="this.style.display='none'; document.getElementById('_537_710_Open_Text').style.display='none'; document.getElementById('_537_710_Closed_Image').style.display='inline'; document.getElementById('_537_710_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_537_710_Closed_Image" onclick="this.style.display='none'; document.getElementById('_537_710_Closed_Text').style.display='none'; document.getElementById('_537_710_Open_Image').style.display='inline'; document.getElementById('_537_710_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ModelAndView&nbsp;handleRequest(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id="_537_710_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_537_710_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Article</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;articles&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;articleService.loadAllArticles();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModelAndView&nbsp;mav&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ModelAndView();<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mav.addObject(articles);<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;mav;<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" /><br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" id="_778_830_Open_Image" onclick="this.style.display='none'; document.getElementById('_778_830_Open_Text').style.display='none'; document.getElementById('_778_830_Closed_Image').style.display='inline'; document.getElementById('_778_830_Closed_Text').style.display='inline';" align="top" alt="" /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" id="_778_830_Closed_Image" onclick="this.style.display='none'; document.getElementById('_778_830_Closed_Text').style.display='none'; document.getElementById('_778_830_Open_Image').style.display='inline'; document.getElementById('_778_830_Open_Text').style.display='inline';" align="top" alt="" style="DISPLAY: none" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;setArticleService(ArticleService&nbsp;articleService)&nbsp;</span><span id="_778_830_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">...</span><span id="_778_830_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb</span></span></span></div></div>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204850#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 22:00:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204850</link>
        <guid>http://digitalsonic.javaeye.com/blog/204850</guid>
      </item>
      <item>
        <title>Spring Framework 2.5的文档翻译工作正式启动</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204853" style="color:red;">http://digitalsonic.javaeye.com/blog/204853</a>&nbsp;
          发表时间: 2008年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div>感觉2.0的翻译结束才没多久，Spring的步伐已经跨到2.5.2了，时间真快，Redsaga这次又将开始跟进翻译2.5.2的文档，其实这除了是响应群众的呼声，也是我们自己的愿望。即便2.5的文档没有翻译，相信到了3.0的时候对中文版文档的需求还是会有的，所以就有了这次的项目。</div>
<div></div>
<div></div>
<div>很荣幸，这次仍然能够担任项目的负责人，虽然只是从2.0到2.5，但在做完工作量统计后，发现任务还是很艰巨的，几乎章章有更新，核心章节的变化更大。希望这次能在保证质量的前提下准时完成文档的翻译和审校，为大家带来一份优秀的Spring参考手册。</div>
<div></div>
<div></div>
<div></div>
<div>以下内容摘自项目启动当天我发的邮件</div>
<div>==================================</div>
<div>随着Spring Framework的飞速发展，以更全面的企业服务和便利的开发优势，Spring2.0成为了更多程序员J2EE开发的首选框架。为了让更多的朋友能快速掌握Spring2.0的开发优势和了解优秀的构架思想，Spring论坛协同满江红开放技术研究组织(<a href="http://wiki.redsaga.com" rel="nofollow" target="_blank">http://wiki.redsaga.com</a>) ， 共同发起Spring2.0 Reference的翻译项目。</div>
<div>&nbsp;</div>
<div>Spring 2.0 Reference中文版自2006年10月22日发布后pdf和chm版本总计下载量已超过8万次，近期Spring Framework发布了2.5版本，现计划对原先的2.0中文文档进行升级。经过了一段时间的准备，项目将从2008年3月1日起正式开始，预计时间为8周，翻译参照的具体版本是Spring官方CVS中的2.5.2的Reference。</div>
<div></div>
<div>（下略）</div>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204853#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Mar 2008 18:04:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204853</link>
        <guid>http://digitalsonic.javaeye.com/blog/204853</guid>
      </item>
      <item>
        <title>自己出的几道关于Spring和Hibernate的面试题</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/204855" style="color:red;">http://digitalsonic.javaeye.com/blog/204855</a>&nbsp;
          发表时间: 2008年02月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>很简单的题目，随便出着玩的，如果你是高手就请直接跳过，若有雷同，纯属巧合！</p>
<p>1、&nbsp;简述你对IoC（Inversion of Control）的理解，描述一下Spring中实现DI（Dependency Injection）的几种方式。<br />2、Spring提倡面向接口编程，请讲一下你对它的理解，它有什么好处。<br />3、Spring的Bean有哪些作用域。<br />4、简单描述Spring Framework与Struts的不同之处，整合Spring与Struts有哪些方法，哪种最好，为什么？<br />5、Rails中大量使用Convention over Configuration的思想，SpringMVC在2.0后也引入了CoC，请简单描述一下SpringMVC的CoC。<br />6、Hibernate中的update()和saveOrUpdate()的区别，session的load()和get()的区别。<br />7、Spring对多种ORM框架提供了很好的支持，简单描述在Spring中使用Hibernate的方法，并结合事务管理。<br />8、简述Spring的事务传播行为和隔离级别。</p>
<div style="MARGIN-LEFT: 18pt; TEXT-INDENT: -18pt">&nbsp;</div>
<hr />
<p>答案：</p>
<p>1、好莱坞原则&mdash;&mdash;不要打电话找我，我会打给你的。IoC将创建的职责从应用程序代码搬到了框架中。Spring对Setter注入和构造方法注入提供支持。（详见<a href="http://martinfowler.com/articles/injection.html" target="_top">http://martinfowler.com/articles/injection.html</a>，以及<a href="http://www.redsaga.com/spring_ref/2.0/html/beans.html#beans-factory-collaborators">http://www.redsaga.com/spring_ref/2.0/html/beans.html#beans-factory-collaborators</a>）</p>
<p>2、在一个面向对象的系统中，系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下，各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了；而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信，大到各模块之间的交互，在系统设计之初都是要着重考虑的，这也是系统设计的主要工作内容。（详见<a href="http://deve.blogdriver.com/deve/415943.html">http://deve.blogdriver.com/deve/415943.html</a>）</p>
<p>3、singleton、prototype、request、session、global session、自定义（详见Spring Framework 2.0 Reference的3.4节<a href="http://www.redsaga.com/spring_ref/2.0/html/beans.html#beans-factory-scopes">bean的作用域</a>）</p>
<p>4、Spring是完整的一站式框架，而Struts仅是MVC框架，且着重于MVC中的C。Spring有三种方式整合Struts：使用 Spring 的 ActionSupport 类整合 Struts；使用 Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor；将 Struts Action 管理委托给 Spring 框架，动作委托最好。（详见<a href="http://www.ibm.com/developerworks/cn/java/j-sr2.html">使用Spring 更好地处理Struts 动作</a>）<br />Spring 2.0新增一种方式：AutowiringRequestProcessor。（详见<a href="http://www.javaeye.com/topic/24239">http://www.javaeye.com/topic/24239</a>）</p>
<p>5、控制器Bean以Controller结尾可直接映射为地址，模型ModelAndView可以不用指定键名，可根据URL自动取得视图名。（详见Spring Framework 2.0 Reference的13.11节<a href="http://www.redsaga.com/spring_ref/2.0/html/mvc.html#mvc-coc">惯例优先原则</a>）</p>
<p>6、saveOrUpdate()方法可以实现update()的功能，但会多些步骤，具体如下：<br />如果对象在该session中已经被持久化，不进行操作；<br />对象的标识符属性(identifier property)在数据库中不存在或者是个暂时的值，调用save()方法保存它；<br />如果session中的另一个对象有相同的标识符抛出一个异常；<br />以上皆不符合则调用update()更新之。</p>
<p>Session.load/get方法均可以根据指定的实体类和id从数据库读取记录，并返回与之对应的实体对象。其区别在于：<br />如果未能发现符合条件的记录，get方法返回null，而load方法会抛出一个ObjectNotFoundException；<br />load方法可返回实体的代理类实例，而get方法永远直接返回实体类；<br /><span>load方法可以充分利用内部缓存和二级缓存中的现有数据，而get方法则仅仅在内部缓存中进行数据查找，如没有发现对应数据，将越过二级缓存，直接调用SQL完成数据读取。</span></p>
<p><span>7、在context中定义DataSource，创建SessionFactoy，设置参数；DAO类继承HibernateDaoSupport，实现具体接口，从中获得HibernateTemplate进行具体操作。在使用中如果遇到OpenSessionInView的问题，可以添加OpenSessionInViewFilter或<span class="hilite1"><span class="hilite1">OpenSessionInView</span></span>Interceptor。（详见Spring Framework 2.0 Reference的12.2节<a href="http://www.redsaga.com/spring_ref/2.0/html/orm.html#orm-hibernate">Hibernate</a>）<br />声明式事务需声明事务管理器，在context中设置&lt;tx:advice&gt;指定属性，用&lt;aop:config&gt;确定&lt;aop:advisor&gt;和&lt;aop:pointcut&gt;。（详见Spring Framework 2.0 Reference的9.5节<a href="http://www.redsaga.com/spring_ref/2.0/html/transaction.html#transaction-declarative">声明式事务管理</a>）</span></p>
<p><span>8、传播行为分为六种：<br />PROPAGATION_REQUIRED--支持当前事务，如果当前没有事务，就新建一个事务。这是最常见的选择。 <br />PROPAGATION_SUPPORTS--支持当前事务，如果当前没有事务，就以非事务方式执行。 <br />PROPAGATION_MANDATORY--支持当前事务，如果当前没有事务，就抛出异常。 <br />PROPAGATION_REQUIRES_NEW--新建事务，如果当前存在事务，把当前事务挂起。 <br />PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。 <br />PROPAGATION_NEVER--以非事务方式执行，如果当前存在事务，则抛出异常。 </span></p>
<p><span>隔离级别：<br />ISOLATION_DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别，使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应 <br />ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别，它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读，不可重复读和幻像读。 <br />ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现，但是可能会出现不可重复读和幻像读。 <br />ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读，不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外，还保证了避免下面的情况产生(不可重复读)。 <br />ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读，不可重复读外，还避免了幻像读。 </span></p>
<p><span>（详见<a href="http://www.javaeye.com/topic/78674">http://www.javaeye.com/topic/78674</a>）</span></p>
<p><span><hr /></span></p>
<span>
<p>（本文决定不定期更新，放些突然想到的，或者网上看到的相关题目，最后更新2008年3月10日。）</p>
</span>
          <br/>
          <span style="color:red;">
            <a href="http://digitalsonic.javaeye.com/blog/204855#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Feb 2008 16:49:00 +0800</pubDate>
        <link>http://digitalsonic.javaeye.com/blog/204855</link>
        <guid>http://digitalsonic.javaeye.com/blog/204855</guid>
      </item>
      <item>
        <title>当Ruby遇到Java，勇敢地跨越边界吧</title>
        <author>DigitalSonic</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://digitalsonic.javaeye.com">DigitalSonic</a>&nbsp;
          链接：<a href="http://digitalsonic.javaeye.com/blog/159127" style="color:red;">http://digitalsonic.javaeye.com/blog/159127</a>&nbsp;
          发表时间: 2008年01月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.&nbsp;引言<br /></strong>2004年Ruby on Rails的横空出世让大家为之一惊，很多Java社区对它也投去关注的目光，现在RoR已经渐渐为人接受，被运用于不少实际项目之中，这也让本来不怎么吸引眼球的Ruby从角落里走了出来。不少开发者在试用了Ruby和RoR后产生了浓厚的兴趣，毕竟Ruby的语法是如此的有趣，Rails中的开发是如此的便捷，有时它替你安排好了一切，敲键盘就是了。<br />但Ruby毕竟和主流的Java/.Net还存在一定距离，比如开发者数量，受关注度等等。更关键的是它缺乏像Java那样的库支持，很多时候不得不自己动手&ldquo;丰衣足食&rdquo;。后来人们想到了要去跨越语言的边界，但做总是比想要难，好在出现了JRuby，在它的帮助下，这条边界已经不再不可逾越，所以勇敢地跨出第一步吧！</p><p><strong>2.&nbsp;JRuby的Java集成</strong><br />如何让Ruby与Java紧密地结合在一起呢？你可以在Ruby中引用Java类、Java原子类型、Java数组，实现Java接口，继承Java类；也可以在Java中使用Ruby的代码。其实一切都很简单，你需要的只是一点小小的魔法而已。</p><p><strong>2.1.&nbsp;JRuby中调用Java</strong><br />在接触JRuby前我使用过RJB（Ruby Java Bridge，<a href="http://rjb.rubyforge.org/">http://rjb.rubyforge.org/</a>），两者都提供在Ruby中调用Java的功能，仅在这点上来说，感觉它们差不多，其实JRuby的功能要强大的多。如果你只是想在Ruby中简单地调用一些Java代码，那可以考虑RJB。<br />要在JRuby中使用Java，先要声明程序中需要Java集成，有两种方法，一种用require 'java'；另一种直接使用java::java.util.ArrayList这样的语法。无论是何种方法，都要保证所用的Java类在CLASSPATH中。</p><pre name="code" class="ruby">require 'java'

java::java.util.ArrayList</pre><p>Java类的使用也有几种选择：</p><pre name="code" class="ruby">include_class &quot;java.util.HashMap&quot;
x = HashMap.new
x.put(&quot;foo&quot;,&quot;bar&quot;)

include_class(&quot;java.lang.String&quot;) {|pkg,name| &quot;JString&quot;}
y = JString.new &quot;Hello, world&quot;</pre><p>如果类是在java、javax、org或者com包中的，那还可以直接引用它们。</p><pre name="code" class="ruby">JString = java.lang.String
y = JString.new &quot;Hello, world&quot;</pre><p>你可以这样来调用System.out.println：</p><pre name="code" class="ruby">java.lang.System.out.println(&quot;Hello, world&quot;)</pre><p>值得一提的是这里的&rdquo;Hello, world&rdquo;是Ruby的字符串，而非java.lang.String，JRuby会自动对一些类型进行转换，开发者无需自己动手。<br />在Java中，方法和变量都用fooBar这样的形式，而Ruby中则是foo_bar，显然在代码中同时出现这两种形式会很不协调，JRuby很聪明地将Java中的fooBar转为了foo_bar，而常见的getter和setter，也简化为了成员属性的名称，foo是getFoo()，而foo=是setFoo()。<br />用to_java()能将一个Ruby的数组转换为Java中的Object[]，如果想要指定数组的类型可以这样：</p><pre name="code" class="ruby">[1,2,3].to_java :float # new float[] {1,2,3}
[&quot;str&quot;, &quot;str2&quot;].to_java java.lang.String # new String[]{&quot;str&quot;,&quot;str2&quot;}</pre><p>常用的symbol有以下几种：:boolean、:byte、:char、:double、:float、:int、:long、:short、:object、:string、:big_decimal（:decimal）和:big_integer（:big_int）。</p><p>如要直接创建并使用Java数组，像下面这样就行了：</p><pre name="code" class="ruby">java.lang.String[3].new
java.lang.String[].new [3,3]
java.lang.String[3][3].new

d = java.lang.String[3,3].new
d[0][0] = &quot;Hello&quot;
d[0][1] = &quot;World&quot;</pre><p><strong>2.2.&nbsp;扩展Java</strong><br />对Java的扩展主要是用Ruby来实现接口和继承类。先来看下如何实现接口：</p><pre name="code" class="ruby">class Compare
  import java.lang.Comparable

  def compareTo o
    this &lt;=&gt; o
  end

end</pre><p>如果要实现多个接口，import就可以了，对于未实现的方法，JRuby会把它交给method_missing。有一点要注意，compareTo在这里不能写成compare_to。<br />至于继承Java类就更容易了，几乎和继承Ruby类没什么区别：</p><pre name="code" class="ruby">class MyStringBuffer &lt; java.lang.StringBuffer
  def append(v)
  end
end</pre><p>StringBuffer类的append方法有多个overload的版本，接收多个不同类型的参数，它们都会被统一到这个唯一的方法上，理由嘛很好理解，不是吗？<br />除此之外，JRuby还为Java的集合类提供了很多扩展，让你能用Ruby的方式来操作Java集合。比方说，java.util.Map多了each方法、 []方法和[]=方法；java.lang.Comparable拥有了&lt;=&gt;方法；所有继承自java.util.Collection的类有了each、&lt;&lt;、+、-和length方法；java.util.List有了[]和[]=方法，还实现了sort和sort!方法。</p><p><strong>2.3.&nbsp;Java中调用JRuby</strong><br />Java 6中加入了JSR223，让Java可以支持脚本语言，如果你的运气没这么好，还停留在Java 5或者Java 1.4上，那可以考虑用BSF或者是直接用JRuby Runtime。当然，除非情况特殊，否则不推荐使用Runtime。<br />JSR223和BSF的用法比较相近，所以这里只演示一下JSR223。先去下载一个JSR223引擎包，把其中的JRuby引擎放进CLASSPATH。代码如下：</p><pre name="code" class="java">import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JRubyJSR223 {
  public static void main(String[] args) throws Exception {
    ScriptEngineManager m = new ScriptEngineManager();
    ScriptEngine rubyEngine = m.getEngineByName(&quot;jruby&quot;);
    rubyEngine.getContext().setAttribute(&quot;num&quot;, new Integer(4), ScriptContext.ENGINE_SCOPE);
    rubyEngine.eval(&quot;puts 2 + $num &quot;);
  }
}</pre><p><strong>3.&nbsp;JRuby on Rails项目的部署</strong><br />既然是RoR的项目，自然是可以借鉴已有的最佳实践，J