??xml version="1.0" encoding="utf-8" standalone="yes"?>国产在线导航,一区二区三区四区在线观看国产日韩,国模叶桐国产精品一区http://www.aygfsteel.com/jackfrued/传道、授业、解惑,何有于我哉! Java SE / Java ME / Java EE / C / C++ / C#zh-cnWed, 18 Jun 2025 15:58:43 GMTWed, 18 Jun 2025 15:58:43 GMT60关于MySQL的简单ȝhttp://www.aygfsteel.com/jackfrued/archive/2011/02/20/344679.html骆昊骆昊Sat, 19 Feb 2011 21:48:00 GMThttp://www.aygfsteel.com/jackfrued/archive/2011/02/20/344679.htmlhttp://www.aygfsteel.com/jackfrued/comments/344679.htmlhttp://www.aygfsteel.com/jackfrued/archive/2011/02/20/344679.html#Feedback0http://www.aygfsteel.com/jackfrued/comments/commentRss/344679.htmlhttp://www.aygfsteel.com/jackfrued/services/trackbacks/344679.html阅读全文

骆昊 2011-02-20 05:48 发表评论
]]>
Struts 2.1.x + Spring 2.5.x + Hibernate 3.3.x整合需要的JAR?/title><link>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314074.html</link><dc:creator>骆昊</dc:creator><author>骆昊</author><pubDate>Sat, 27 Feb 2010 10:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314074.html</guid><wfw:comment>http://www.aygfsteel.com/jackfrued/comments/314074.html</wfw:comment><comments>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314074.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackfrued/comments/commentRss/314074.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackfrued/services/trackbacks/314074.html</trackback:ping><description><![CDATA[<p style="font-size: 12pt"> 下面q个表相信对很多人都有用Q?br /> <table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 426.1pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="568" border="1"> <tbody> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #ffffca; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>jar<span style="font-family: 宋体">包名U?/span></p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #ffffca; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">所在位|?/span></p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; background: #ffffca; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">说明</span></p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>antlr-2.7.6.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate/lib/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">解析</span>HQL</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>aspectjrt</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring/lib/aspectj</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>AOP</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>aspectjweaver</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>..</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>AOP</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>cglib-nodep-2.1_3.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring/lib/cglib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">代理Q二q制增强</span></p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>common-annotations.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring/lib/j2ee</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>@Resource</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-collections-3.1.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate/lib/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">集合框架</span></p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-fileupload-1.2.1.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-io-1.3.2</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-logging-1.1.1</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">单独下蝲最新版?/span></p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts</p> <p>spring</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>dom4j-1.6.1.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p><span style="font-family: 宋体">解析</span>xml</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>ejb3-persistence</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-annotation/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>@Entity</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>freemarker-2.3.13</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate3.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-annotations</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-annotation/</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-common-annotations</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-annotation/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>javassist-3.9.0.GA.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hiberante/lib/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>jta-1.1.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>..</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate transaction</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>junit4.5</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>mysql-</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>ognl-2.6.11.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>slf4j-api-1.5.8.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate/lib/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate-log</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>slf4j-nop-1.5.8.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>hibernate/lib/required</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring/dist</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts2-core-2.1.6.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>xwork-2.1.2.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>struts2</p> </td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-dbcp</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>spring/lib/jarkata-commons</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>commons-pool.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"> <p>..</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: black 1pt solid" valign="top" width="189"></td> </tr> <tr> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: black 1.5pt solid; width: 142pt; padding-top: 0cm; border-bottom: medium none" valign="top" width="189"> <p>struts2-spring-plugin-2.1.6.jar</p> </td> <td style="border-right: black 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: medium none" valign="top" width="189"> <p>struts/lib</p> </td> <td style="border-right: black 1.5pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 142.05pt; padding-top: 0cm; border-bottom: medium none" valign="top" width="189"></td> </tr> </tbody> </table> </p> <img src ="http://www.aygfsteel.com/jackfrued/aggbug/314074.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackfrued/" target="_blank">骆昊</a> 2010-02-27 18:23 <a href="http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314074.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP之Introduction(@DeclareParents)?/title><link>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314060.html</link><dc:creator>骆昊</dc:creator><author>骆昊</author><pubDate>Sat, 27 Feb 2010 06:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314060.html</guid><wfw:comment>http://www.aygfsteel.com/jackfrued/comments/314060.html</wfw:comment><comments>http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jackfrued/comments/commentRss/314060.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jackfrued/services/trackbacks/314060.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt"><span style="font-family: Times New Roman"><span style="font-size: 12pt; font-family: ">Spring的文档上对Introductionq个概念和相关的注解@DeclareParents作了如下介绍Q?br /> <br style="font-family: " /> <span style="color: #000080"><em>Introductions (known as inter-type declarations in AspectJ) enable an aspect to declare that advised objects implement a given interface, and to provide an implementation of that interface on behalf of those objects.<br style="font-family: " /> An introduction is made using the @DeclareParents annotation. This annotation is used to declare that matching types have a new parent (hence the name).</em> <br /> </span><br style="font-family: " /> 在这D介l之后还l出了一个例子,对于初学者要理解q段话以及后面的例子q是蛮困隄Q因此下面用一个简单的例子告诉大家什么是Introduction以及如何使用@DeclareParents注解?br style="font-family: " /> <br style="font-family: " /> 对于Introductionq个词,个h认ؓ理解成引入是最合适的Q其目标是对于一个已有的cd入新的接口(有h可能会问Q有什么用呢?单的_你可以把当前对象转型成另一个对象,那么很显Ӟ你就可以调用另一个对象的Ҏ(gu)了)Q看一个例子就全明白了?br /> <br /> 假设已经有一个UserServicecL供了保存User对象的服务,但是现在惛_加对Userq行验证的功能,只对通过验证的User提供保存服务Q在不修改UserServicecM码的前提下就可以通过Introduction来解冟?br /> <br /> 首先定义一个Verifier接口Q里面定义了q行验证的方法validate()Q如下所C:<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.jackfrued.aop;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.jackfrued.models.User;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_90_130_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_130_Open_Text.style.display='none'; Codehighlighter1_90_130_Closed_Image.style.display='inline'; Codehighlighter1_90_130_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_90_130_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_90_130_Closed_Text.style.display='none'; Codehighlighter1_90_130_Open_Image.style.display='inline'; Codehighlighter1_90_130_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">interface</span><span style="color: #000000"> Verifier </span><span id="Codehighlighter1_90_130_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_90_130_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> validate(User user);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> <br /> 接下来给接口的一个实现类BasicVerifierQ如下所C:<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.jackfrued.aop;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.jackfrued.models.User;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_111_281_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_281_Open_Text.style.display='none'; Codehighlighter1_111_281_Closed_Image.style.display='inline'; Codehighlighter1_111_281_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_111_281_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_281_Closed_Text.style.display='none'; Codehighlighter1_111_281_Open_Image.style.display='inline'; Codehighlighter1_111_281_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> BasicVerifier </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Verifier </span><span id="Codehighlighter1_111_281_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_111_281_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    @Override<br /> <img id="Codehighlighter1_161_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_161_279_Open_Text.style.display='none'; Codehighlighter1_161_279_Closed_Image.style.display='inline'; Codehighlighter1_161_279_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_161_279_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_161_279_Closed_Text.style.display='none'; Codehighlighter1_161_279_Open_Image.style.display='inline'; Codehighlighter1_161_279_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> validate(User user) </span><span id="Codehighlighter1_161_279_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_161_279_Open_Text"><span style="color: #000000">{<br /> <img id="Codehighlighter1_240_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_260_Open_Text.style.display='none'; Codehighlighter1_240_260_Closed_Image.style.display='inline'; Codehighlighter1_240_260_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_240_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_240_260_Closed_Text.style.display='none'; Codehighlighter1_240_260_Open_Image.style.display='inline'; Codehighlighter1_240_260_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000">(user.getUsername().equals(</span><span style="color: #000000">"</span><span style="color: #000000">jack</span><span style="color: #000000">"</span><span style="color: #000000">) </span><span style="color: #000000">&&</span><span style="color: #000000"> user.getPassword().equals(</span><span style="color: #000000">"</span><span style="color: #000000">1234</span><span style="color: #000000">"</span><span style="color: #000000">)) </span><span id="Codehighlighter1_240_260_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_240_260_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span></div> <br /> 如何才能为UserServicecd加验证User的功能呢Q如下所C定义AspectQ?br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.jackfrued.aop;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.aspectj.lang.annotation.Aspect;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.aspectj.lang.annotation.DeclareParents;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.stereotype.Component;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />@Aspect<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" />@Component<br /> <img id="Codehighlighter1_213_359_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_359_Open_Text.style.display='none'; Codehighlighter1_213_359_Closed_Image.style.display='inline'; Codehighlighter1_213_359_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_213_359_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_213_359_Closed_Text.style.display='none'; Codehighlighter1_213_359_Open_Image.style.display='inline'; Codehighlighter1_213_359_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> MyAspect </span><span id="Codehighlighter1_213_359_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_213_359_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    @DeclareParents(value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.tsinghuait.services.UserService</span><span style="color: #000000">"</span><span style="color: #000000">, <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            defaultImpl</span><span style="color: #000000">=</span><span style="color: #000000">com.tsinghuait.aop.BasicVerifier.</span><span style="color: #0000ff">class</span><span style="color: #000000">)<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> Verifier verifer;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div> 接下来就可以UserService对象转型为Verifier对象q对用户q行验证了,如下所C:<br /> <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.jackfrued.main;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.context.ApplicationContext;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.context.support.ClassPathXmlApplicationContext;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.jackfrued.aop.Verifier;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.jackfrued.models.User;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> com.jackfrued.services.Service;<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img id="Codehighlighter1_283_664_Open_Image" onclick="this.style.display='none'; Codehighlighter1_283_664_Open_Text.style.display='none'; Codehighlighter1_283_664_Closed_Image.style.display='inline'; Codehighlighter1_283_664_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_283_664_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_283_664_Closed_Text.style.display='none'; Codehighlighter1_283_664_Open_Image.style.display='inline'; Codehighlighter1_283_664_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">class</span><span style="color: #000000"> Test </span><span id="Codehighlighter1_283_664_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_283_664_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /> <img id="Codehighlighter1_326_662_Open_Image" onclick="this.style.display='none'; Codehighlighter1_326_662_Open_Text.style.display='none'; Codehighlighter1_326_662_Closed_Image.style.display='inline'; Codehighlighter1_326_662_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_326_662_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_326_662_Closed_Text.style.display='none'; Codehighlighter1_326_662_Open_Image.style.display='inline'; Codehighlighter1_326_662_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">static</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> main(String[] args) </span><span id="Codehighlighter1_326_662_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_326_662_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        User user1 </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> User();<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        user1.setUsername(</span><span style="color: #000000">"</span><span style="color: #000000">abc</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        user1.setPassword(</span><span style="color: #000000">"</span><span style="color: #000000">def</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        ApplicationContext factory </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">config.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Service s </span><span style="color: #000000">=</span><span style="color: #000000"> (Service) factory.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">service</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        Verifier v </span><span style="color: #000000">=</span><span style="color: #000000"> (Verifier) s;<br /> <img id="Codehighlighter1_599_653_Open_Image" onclick="this.style.display='none'; Codehighlighter1_599_653_Open_Text.style.display='none'; Codehighlighter1_599_653_Closed_Image.style.display='inline'; Codehighlighter1_599_653_Closed_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_599_653_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_599_653_Closed_Text.style.display='none'; Codehighlighter1_599_653_Open_Image.style.display='inline'; Codehighlighter1_599_653_Open_Text.style.display='inline';" alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="color: #0000ff">if</span><span style="color: #000000">(v.validate(user1) </span><span id="Codehighlighter1_599_653_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"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_599_653_Open_Text"><span style="color: #000000">{<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">验证成功</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />            s.serve(user1);<br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" align="top" />        <br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br /> <img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span></div> q样Q上面代码中的user1是不会被服务的,当然是因为没有通过验证啦!<br /> <br /> q样一_是不是大概明白什么是Introduction了呢Q其实@DeclareParents用v来也很简单吧Q?br /> <br /> 至于配置文g和其他内容请参考完整源代码Q?a href="/Files/jackfrued/Spring-introduction.rar">/Files/jackfrued/Spring-introduction.rar</a><br /> </span></span></span> <img src ="http://www.aygfsteel.com/jackfrued/aggbug/314060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jackfrued/" target="_blank">骆昊</a> 2010-02-27 14:09 <a href="http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring AOP~程中的一个小问题http://www.aygfsteel.com/jackfrued/archive/2010/02/27/314053.html骆昊骆昊Sat, 27 Feb 2010 04:36:00 GMThttp://www.aygfsteel.com/jackfrued/archive/2010/02/27/314053.htmlhttp://www.aygfsteel.com/jackfrued/comments/314053.htmlhttp://www.aygfsteel.com/jackfrued/archive/2010/02/27/314053.html#Feedback0http://www.aygfsteel.com/jackfrued/comments/commentRss/314053.htmlhttp://www.aygfsteel.com/jackfrued/services/trackbacks/314053.html在用Spring 2.5.6 + jdk 1.7开发时Q用@PointCut注解定义切入Ҏ(gu)会导致以下错?br />
error at ::0 can't find referenced pointcut XXX

q应该算是一个Bug吧,不过只要在类路径下放最新的aspectjrt.jar和aspectjweaver.jar
可以避免这个问题了。可以去到eclipse的官方网站下载上面的JAR包,下蝲地址Q?br />
http://www.eclipse.org/aspectj/downloads.php


骆昊 2010-02-27 12:36 发表评论
]]>
[转]Z需求测?RBT)http://www.aygfsteel.com/jackfrued/archive/2010/02/05/312051.html骆昊骆昊Fri, 05 Feb 2010 01:50:00 GMThttp://www.aygfsteel.com/jackfrued/archive/2010/02/05/312051.htmlhttp://www.aygfsteel.com/jackfrued/comments/312051.htmlhttp://www.aygfsteel.com/jackfrued/archive/2010/02/05/312051.html#Feedback0http://www.aygfsteel.com/jackfrued/comments/commentRss/312051.htmlhttp://www.aygfsteel.com/jackfrued/services/trackbacks/312051.html

人员的首要职责是找bugQ但是最重要、最Ҏ(gu)的职责应该是在Y件品发布前保公司的Y件品满顾客的需求?/p>

  试l采用RBT(Requirements-based testing)Q基于需求的试Ҏ(gu)会ɋ试更加有效Q因为它使测试专注于质量问题产生的根源?/p>

              

  研究报告指出Q多q来Q大部分的Y仉目不能按计划完成Q不能有效控制成本。大部分目p|的首要原因是软g质量差,D大量的返工、重新设计和~码。其中Y件质量差的两大原因是QY仉求规D明书的错误、有问题的系l测试覆盖?/p>

需求规D明书中的错误

  我们l常听到最l用h怨、不用我们的软gQ而这些Y件还通过了严格的试和QA。对于这Ҏ(gu)们不会感到惊Ӟ原因是我们知道需求从一开始就是错误的?/p>

  一调?James Martin (“An Information Systems Manifesto,” Prentice Hall, 1984)表明56%的缺陷其实是在Y仉求阶D被引入的。而这其中?0%是由于需求文档编写有问题、不明确、不清晰、不正确D的。剩下的50%是由于需求的遗漏D的?/p>

有问题的试覆盖

  要获得满意的试覆盖率是很难的。尤其现在的pȝ都比较复杂,功能场景很多Q逻辑分支很多Q要做到完全的覆盖几乎不可能?/p>

  再者,需求的变更往往~Z控制Q需求与试用例之间往往~Z可跟t性?/p>

             

RBT三大最?jng)_?/p>

1?nbsp; Test early and often.早试Q频J地试

  认需求的业务价倹{?/p>

  各利益相x应该寚w求进行评审?/p>

  通过用例查需求的完整?/p>

  应用语言分析技?/strong>保需求文清C_不会引v同一问题不同人有不同的解释?/p>

 2?nbsp; Test with your head, not your gut.不要单凭l验试

  不要依赖试人员的经验来设计试用例Q应该采用系l、严格的试用例设计Ҏ(gu)Q而不是依赖有l验的测试h员的技巧。通过q样的方式来增加试覆盖的有效性。格式化、结构化的需求文有助于试人员评估需求的试覆盖率?/p>

  通过试用例评审来检查测试用例存在的错误Qƈ且找出需求的不之处?/p>

 3?nbsp; Test with measurement and improvement in mind.试q程中要保持度量

  在用基于需求的试Ҏ(gu)的过E中Q保持对需求的可追t性非帔R要。保持需求与试用例及测试之间的可追t性有助于监视q度、度量覆盖率Q当然也有助于控刉求变更?/p>

骆昊 2010-02-05 09:50 发表评论
]]>
[转]我的七个http://www.aygfsteel.com/jackfrued/archive/2010/02/01/311556.html骆昊骆昊Mon, 01 Feb 2010 13:37:00 GMThttp://www.aygfsteel.com/jackfrued/archive/2010/02/01/311556.htmlhttp://www.aygfsteel.com/jackfrued/comments/311556.htmlhttp://www.aygfsteel.com/jackfrued/archive/2010/02/01/311556.html#Feedback0http://www.aygfsteel.com/jackfrued/comments/commentRss/311556.htmlhttp://www.aygfsteel.com/jackfrued/services/trackbacks/311556.html如果你喜Ƣ编E,那么你真是受C上天的眷。你是非常幸q的数Z一Q能够以自己喜欢的事谋生。大多数人没有这么幸q。你认ؓ理所当然的观?span style="font-family: Times New Roman">“热爱你的工作Q其实是一个很C的概c通常的看法是Q工作是一U让人很不开心的事,你ؓ了拿工资才不得不M班。你工作的目的是Z攒下钱去q那些自q正喜Ƣ干的事Q但是前提是你得{到65岁退休之后才行,而且q有不少条g。条件一Q你的积蓄必够多Q条件二Q你没有老到C动,你还有体力去q那些事情;条g三,你喜Ƣ的事情不需要用到脆q膝盖、昏q视力Q也不要求你C一里地不喘气,{等?/span>


我刚才说到哪里了Q对了,我要提徏议?/span>


毕业前练好写?/span>


如果不是Linus Torvalds不断地散布福韻I请问Linux操作pȝ会成功吗Q虽然他是一个非常聪明的计算机天才,但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过?sh)子邮g和邮件列表用书面形式传播自己的想法,最l引起了所有h的注意?/span>


你听说过现在风靡一时的极限~程[ ] ”Q?/span>Extreme ProgrammingQ吗Q我在这个地方不谈我Ҏ(gu)限编E的看法Q我只说如果你听q这个词Q那么原因就是它的倡导者都是一些非常有才华的作家和演说家?/span>


即我们~小范围Q将目光局限在M一个Y件开发团体中Q你也会发现该团体中最有权势和影响力的E序员正是那些表达能力强的程序员Q他们无论是做书面表达还是做口头表达Q都能够清晰、自如、具有说服力C达观炏V此外,长得高也有助于提升媄响力Q不q这个不取决于你?/span>


一个普通程序员与一个优UE序员的区别Q不在于他们懂得的编E语a谁多谁少Q也不在于他们喜Ƣ用Python语言q是喜欢?/span>Java语言Q而在于他们能否与他h交流思想。如果你能说服其他hQ你的力量就可以得到攑֤。如果你能写出清晰的注释和技术规D明书Q其他程序员p够理解你的代码,因此他们p在自q代码中用,而不必重写。如果你做不到这一点,你的代码对其他h没有h(hun)倹{如果你能ؓ最l用户写出清晰的使用手册Q其他hp明白你的代码是用来干什么的Q这是唯一让别人明白你的代码有何h(hun)值的Ҏ(gu)?/span>SourceForge[ ]上有许多优美的、有用的代码Q但是它们都像被埋葬了一PҎ(gu)没h来用Q原因就是它们的作者没有写好用说明(或者压根就没写Q。这样一来就没有人知道他们的成果Q他们杰出的代码p亡了?/span>


如果一个程序员不会用英语写作、没有良好的写作能力Q我׃会雇他。如果你能写Q不你d家公司工作,你很快就会发现写作技术文档的d会落C头上Q这意味着你已l开始在攑֤自己的媄响力了,理层正在注意到你?/span>


大学里有些课E被公认?span style="font-family: Times New Roman">“写作密集?/span>Q?/span>writing intensiveQ课E,q就是说Z拿到学分Q你必须写作多得可怕的文字。一定要Mq样的课E!不要学U,只要q门课每周甚x天都要你写东西,你就M?/span>


你还可以动手写日记或者网志。你写得多Q写作就会变得越Ҏ(gu)。写h容易,你就会写得越多。这是一个良性@环?/span>


毕业前学?span style="font-family: Times New Roman">C语言


W二Ҏ(gu)要讲的是C语言。请注意Q我说的?/span>C语言Q而不?/span>C++。虽然在实际使用?/span>C语言已经来罕见,但是它仍然是当前E序员的共同语言?/span>C语言让程序员互相沟通,更重要的是,它比你在大学中学到的C语言Q比?/span>ML语言?/span>Java语言?/span>Python语言或者其它正在教授的行垃圾语言Q都更接q机器。你臛_需要花一个学期来了解机器原理Q否则你永远不可能在高语言的层ơ写出高效的代码。你也永q无法开发编译器和操作系l,而它们恰恰属于目前程序员能够得到的最?jng)_作之列。别Z永远不会攑ֿ?yu)大型项目的架构设计交给你。我不管你懂多少延箋Q?/span>continuationQ、闭包(closureQ、异常处理(exception handlingQ,只要你不能解释ؓ什?/span>while (*s++ = *t++)Q这句代码的作用是复制字W串Q或者不觉得q是世界上对你来说再自然不过的事情,那么你就是在盲目无知的情况下~程。在我看来,q就好像一个医生不懂得最基本的解剖学在开处方Q他看病的根据完全是因ؓ那些娃娃脸的医药厂商销售代表说q种药有用?/span>


毕业前学好微观经学


如果你没有上qQ何经学评Q那么我首先来做一个超短的评论Q经学是这L(fng)学科之一Q刚开始学的时候蘪轰烈烈,有许多有用的、言之有理的理论和可以在真实世界中得到证明的事实Q等{;但是Q再学下d每况愈下Q有用的东西׃多了。经学一开始那个有用的部分正是微观l济学,它是商业领域所有重要理论的基础。跟在微观经学后面的东西就不行了。你接下来学的是宏观l济学,如果你愿意,管跌去,也不会有什么损失。宏观经学开头的部分是利息理论,内容比方说是利率与失业之间的关系Q但是怎么说呢Q看上去q部分里面还没有被证实的东西多于已经被证实的东西。学完这部分Q后面的内容来糟p,许多l济学专业的学生实际上都变成在搞物理学,因ؓq样才能在华街上找到更好的工作。但是不怎样Q你一定要d微观l济学,因ؓ你必L懂供l和需求,你必L白竞争优势,你必ȝ解什么是净现|NPVQ,什么是贴现Q什么是辚w效用。只有这P你才会懂得ؓ什么生意是现在q种做法?/span>


Z么计机pȝ学生也应该学l济学?因ؓQ从l营一家公司的角度来看Q比起那些不懂的E序员,一个理解基本商业规则的E序员将会更有h(hun)倹{就是这么简单。我无法告诉你有多少ơ我是那样地充满挫折感,因ؓ我看C太多的提Z些疯狂的x的程序员Q这些想法在代码上也许可行,但在资本M世界中毫无意义。如果你懂得商业规则Q你是一个更有h(hun)值的E序员,你会因此得到回报的,但是前提是你要去学习微观l济学?/span>


不要因ؓ枯燥׃选修非计机专业的课E?/span>


x?span style="font-family: Times New Roman">GPAl点的一个好Ҏ(gu)是多选修非计机pȝ评。请千万不要低估你的GPA的重大意义。千千万万的Zl理和招聘h员在拿到一份简历的时候,W一眼就会去?/span>GPAQ包括我也是q样。我们不会ؓq种做法道歉。ؓ什么?因ؓGPA不反映单个的成WQ而是代表了许多个教授在一D很长的旉中,在不同的情况下,对你的表现的一个ȝ评估?/span>SAT成WN不够吗?哈,那只不过是一场几个小时的试|了?/span>GPA中包括了四年大学期间你的论文、期中考试和课堂表玎ͼL有几百次之多。当ӞGPA也有自己的问题,不是癑ֈ之百准确。比如,q些q来Q老师对学生的打分来宽松,学习成W有通货膨胀的趋ѝ再比如Q?/span>GPA无法反映评的难度,没h能够看出你的GPA是来自无名社区大学家政系的轻松课E还是来自加州理工学院针对研I生的量子力学课E。渐渐地Q我形成了一套自q做法Q首先我会过滤掉所有来自社区大学?/span>GPA低于2.5的简历,然后我会要求剩下的hl我寄成l单和推荐信。我再从中发现那些成l一贯优U的hQ而不是那些仅仅在计算机系评中得到高分的人?/span>


Z么我要关心某人的Ƨ洲历史评成W呢,毕竟作ؓ雇主我要扄应该是程序员啊?何况Q历史是那么枯燥Q不得高分很正常。哦Q这么说来,你的意思是我应该雇用你Q而不用考虑一旦工作变得枯燥你会不会努力工作?别忘了,在编E工作中也有很枯燥的东西。每一工作都有枯燥难耐的时刻。我不想雇用那些只想q有事情的人?/span>


选修有大量编E实늚评


我依然清楚记得我发誓l不ȝI生的那一刅R那是在一门叫?span style="font-family: Times New Roman">“动态逻辑的课E上Q教师是zd十的耉大学教授Lenore ZuckQ她是计机p那些聪明的老师中最聪明的h之一?/span>


如今Q?nbsp;׃记忆力糟p, 我已l差不多把这门课的内容忘光了Q但是不怎么_在这里我q是惌对付着说一下。大致上QŞ式逻辑的意思是_如果条g成立Q你p证明l论也成立。比如,Ҏ(gu)形式逻辑Q已?span style="font-family: Times New Roman">“只要成W好,p被雇?/span>Q然后假?/span>“Johnny的成l好Q你可以得C个崭新的l论“Johnny会被雇用。这完全是经典方法。但是,一个解构主义者(deconstructionistQ只需?/span>10U钟p破坏形式逻辑中所有有用的东西。这样一来,留给你的只是一些趣x,而不是实用性?/span>


现在再来说动态逻辑。它与Ş式逻辑其实是一回事Q但是必d多考虑旉因素。比如,你打开灯之后,p看见自己的鞋?/span>Q已?/span>灯以前是亮的Q那么这意味着你看见了自己的鞋?/span>?/span>


对于?span style="font-family: Times New Roman">Zuck教授那样聪明的理论家Q动态逻辑充满了吸引力Q因为它看上d有希望让你在形式上证明一些计机E序的相关理论问题。这样做说不定很有用。比如,你可以用它在形式上证明,火星漫游车的闪存卡不会发生溢出(overflowQ问题,不会因而整天一遍又一遍地重启Q耽误了它在那颗赤U色的星球上漫游L火星人马文(Marvin the MartianQ?/span>


在第一堂课上,Zuck博士写满了整整两面黑板,甚至黑板旁边的墙上都写上了很多证明步骤。需要证明的问题是,有一个控制灯泡的开养I现在灯没有亮,q时你打开了开养I误明灯泡将会点亮?/span>


整个证明q程复杂得不可思议Q处处都是陷阱,必须十分心。保证这个证明不出错太困难了Q还不如直接怿打开开关灯׃亮。真的,虽然证明q程写满了许多块黑板Q但是还是有许多中间步骤被省略了Q因为如果要从Ş式逻辑上完整证明所有步骤,那就琐碎得无法Ş容了。许多步骤是用各U经典的逻辑证明Ҏ(gu)推导得到的,包括归纳法、反证法{,甚至有些部分q是由旁听的研究生证明的?/span>


留给我们的课后作业是证明逆命题:如果灯原来是关着的,现在却亮了,那么误明开关的状态一定同原来相反?/span>


我动手开始证明,我真的去证明了?/span>


我在图书馆里待了很长旉?/span>


我对照着Zuck博士的原始证明想依样画葫芦。研I了几个时之后Q我在其中发C一个错误。可能我抄写的时候抄错了Q但是这使得我想通了一件事。如果花?/span>3个小Ӟ写满了一块又一块的黑板Q每一U钟都可能出错,最后能够证明的却只是一个很琐碎的结论,那么q种方式有多大的实用性呢Q在zȝ生、充满趣味的现实世界中,你永q都不会有机会用它?/span>


但是Q动态逻辑的理论家们对q一点不感兴。他们看上它不是因ؓ它有用,而是因ؓ它可以ؓ他们带来ln教职?/span>


我放弃了q门课,q且发誓l不会去读计机U学的研I生?/span>


q个故事告诉我们Q计机U学与Y件开发不是一回事。如果你真的非常q运Q你的学校可能会开讑־像样的Y件开发课E。但是另一U可能是Q你的学校根本不教你在现实中如何~程Q因为精英学校都觉得Q教授工作技能最好留l职业技术学校、犯人重q社会的培训目d。你到处都能学怎么写代码。别忘了Q我们是耉大学Q我们的使命是培L来的世界领袖。你交了16万美元的学费Q却在学循环语句的写法,q怎么可以Q你以ؓq是什么地方,N是机场沿途的酒店里(f)时拼凑v来不靠谱?/span>Java语言培训班?哼哼?/span>


ȝ在于我们没有一U真正教授Y件开发的专门学校。你如果xZ个程序员Q你可能只能选择计算机科学专业。这是一个不错的专业Q但是它同Y件开发不是一回事。在那些400{的课E代号中Q去L名称中带?/span>“Practicum”q个词的评吧(~者注Q指供h实习的课E)。不要被q个拉丁语单词吓倒,q些都是有用的课E,之所以vq种名字Q只是ؓ了让那些文绉l、装腔作ѝ满嘴胡说八道的公司l理们觉得高p?/span>


别担心所有工作都被印度h抢走


我首先要说的是,如果你本w就已经在印度了Q或者你是印度人,那么你真的毫无必要去惌件事Q根本不用琢所有的工作Z是不是都跑到了印度。那些都是非常好的工作,好好Cn受吧Q祝你n体健店?/span>


但是Q我不断听说计算机系的入学hC降得很厉宻I已经C危险的程度。根据我听到的说法,其中的一个原因是学生们不愿去学一个工作机会都向印度的专?/span>。这U担心大错特错,有很多理由可以反驟뀂首先,Ҏ(gu)一时性的商业潮流军_个h的职业选择Q这是愚蠢的。其ơ,即ɾ~程工作无一q存地都向了印度和中国Q但是学习编E本w依然是一U第一的素质训练Q可以ؓ各种有趣的工作打下基Q比如业务流E工E(business process engineeringQ。再ơ,不管是在国q是在印度,真正优秀的程序员依然是非帔R常短~的Q这一点请怿我。不错,实有相当一批失业的IT从业者在那里鼓噪Q抱怨他们长旉找不到工作,但是你知道吗Q即使冒着触怒这些h的风险,我还是要_真正优秀的程序员Ҏ(gu)不会׃。最后,你还能找到更好的专业吗?你觉得什么专业好Q主修历史学Q如果那P你毕业的时候就会发玎ͼҎ(gu)没有其他选择Q只能去法学院。不q我倒是知道一件事Q?/span>99%的律师都痛恨他们的工作,痛恨他们当律师的每一分钟。可是,律师每周的工作时间偏偏长?/span>90时。就像我前面说过的:如果你喜Ƣ编E,那么你真是受C上天的眷。你是非常幸q的数Z一Q能够以自己喜欢的事谋生?/span>


不过说实话,我不觉得学生们真的有上面的想法。近q来Q计机pd学h数的下降只是回到了历史上的正常水qI因ؓ前些q的互联|狂热得入学h数出C大沫,抬高了基数。由于这U沫,许多q不真的喜欢~程的h也来读计机pR他们心里想的是Q只要进了计机p,来p扑ֈ׃h的高薪工作,p获得24岁当?/span>CEO、进?/span>IPO的机会。谢天谢圎ͼq些人现在都计机p远q的了?/span>


找一份好的暑期实习工?/span>


_明的招聘负责h都知道,喜欢~程的h高中时就牙ȝ信息输入了数据库Q进入大学前去q三ơ电(sh)脑夏令营Qؓ校报做过内容理pȝQ有qY件公司的夏季实习l历。招聘负责h是要在你的历上找这些东ѝ?/span>


如果你喜Ƣ编E, ׃要随便什么工作都{应Q否则你会犯下最大的错误。不是暑期工作Q还是兼职或者其他性质的工作,只要与编E无养I׃要轻易接受。我知道Q其?span style="font-family: Times New Roman">19岁的孩子都想去购物中心里打工Q在那里折叠衬衫。但是你与他们不同,?/span>19岁时已l掌握了一门非常有价值的技能。将旉费在折叠衬衫上是很愚蠢的,{到毕业的时候,你的历上本应该写满了一大堆与编E相关的l历。就让那些胦l类的毕业生ȝ车公?/span>帮助Z满他们UR的需?/span>吧,你要q的是别的事Q在?sh)视中扮演超人?/span>Tom Welling?/span>1除外Q?/span>


Z让你的生zd得更Ҏ(gu)一些,也ؓ了强调这整篇文章完全是ؓ了满x的个人目的,我要告诉你,我的公司——Fog Creek软g公司—?/span>提供软g开发方面的暑期实习Z。我们非常看重简历?/span>比v其他公司的实习工作,你在Fog Creek最有可能学到更多的~写代码、Y件开发、商业运作方面的知识?/span>q是d夏天我们的一个实习生Ben说的。他会这栯Qƈ不完全是因ؓ我派了hC的宿舍让他这栯。我们接受实习申L(fng)截止日期?/span>2?/span>1日。一h吧?/span>


如果你听从了我的Q你q是有可能落得一个?zhn)惨的下场Q比如很早就卖掉了微软公司的股票Q再比如拒绝了谷歌公司的工作ZQ原因是你想要一间自q可以关上门的独立办公室,或者做Z其他生命中愚蠢的军_。但是,q些可不是我的错。我一开始就告诉q你Q不要听我的话?/span>


Q注1 Q?T o m W e l l i n g是一个美国演员, 在电(sh)视剧《超人前传》(SmallvilleQ中扮演h。该?sh)视剧讲q还没有成长为后来超人的克拉?/span>·肯特年时代的故事。)


作者简介:


Joel Spolsky
Joel SpolskyQ世界最具媄响的E序员网?/span>Joel on Software的主人,软g业一位旗帜鲜明的思想者,一位传lY件管理理늚挑战者。他创办的这个网站被E序员誉?/span>反呆伯特宣言?/span>Qƈ被翻译ؓ三十多种语言?/span>Joel毕业于耉大学Q随后即q入微Y公司工作Q曾d软公?/span>E x c e l 开发小l项目经理。现在他在自己创办的Fog Creek软g公司?/span>CEO。此外,他与人合办的Stack Overflow已经成ؓ如今最热门的技术网站?/span>




骆昊 2010-02-01 21:37 发表评论
]]>
վ֩ģ壺 | | ̩| | | | ƽ| | | | | Ժ| | ˮ| | | | ѷ| | | | °| | | | | | | SHOW| ۰| | | Ƥɽ| | Զ| | ͼʲ| ɳ| ˮ| | Ϻ|