<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>jimichan</title>
    <description></description>
    <link>http://jimichan.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>groovy MetaClass 剖析 1</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/212082" style="color:red;">http://jimichan.javaeye.com/blog/212082</a>&nbsp;
          发表时间: 2008年07月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><!--          [if gte mso 9]><xml>
 <w:WordDocument>
  <w:View>Normal</w:View>
  <w:Zoom>0</w:Zoom>
  <w:TrackMoves/>
  <w:TrackFormatting/>
  <w:PunctuationKerning/>
  <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
  <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  <w:ValidateAgainstSchemas/>
  <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
  <w:IgnoreMixedContent>false</w:IgnoreMixedContent>
  <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
  <w:DoNotPromoteQF/>
  <w:LidThemeOther>EN-US</w:LidThemeOther>
  <w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
  <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
  <w:Compatibility>
   <w:SpaceForUL/>
   <w:BalanceSingleByteDoubleByteWidth/>
   <w:DoNotLeaveBackslashAlone/>
   <w:ULTrailSpace/>
   <w:DoNotExpandShiftReturn/>
   <w:AdjustLineHeightInTable/>
   <w:BreakWrappedTables/>
   <w:SnapToGridInCell/>
   <w:WrapTextWithPunct/>
   <w:UseAsianBreakRules/>
   <w:DontGrowAutofit/>
   <w:SplitPgBreakAndParaMark/>
   <w:DontVertAlignCellWithSp/>
   <w:DontBreakConstrainedForcedTables/>
   <w:DontVertAlignInTxbx/>
   <w:Word11KerningPairs/>
   <w:CachedColBalance/>
   <w:UseFELayout/>
  </w:Compatibility>
  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
  <m:mathPr>
   <m:mathFont m:val="Cambria Math"/>
   <m:brkBin m:val="before"/>
   <m:brkBinSub m:val="&#45;-"/>
   <m:smallFrac m:val="off"/>
   <m:dispDef/>
   <m:lMargin m:val="0"/>
   <m:rMargin m:val="0"/>
   <m:defJc m:val="centerGroup"/>
   <m:wrapIndent m:val="1440"/>
   <m:intLim m:val="subSup"/>
   <m:naryLim m:val="undOvr"/>
  </m:mathPr></w:WordDocument>
</xml><![endif]--><!--          [if gte mso 9]><xml>
 <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267">
  <w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
  <w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
  <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 1"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 2"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 3"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 4"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 5"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 6"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 7"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 8"/>
  <w:LsdException Locked="false" Priority="39" Name="toc 9"/>
  <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
  <w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/>
  <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
  <w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
  <w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
  <w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
  <w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
  <w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
  <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
  <w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
  <w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
  <w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
  <w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/>
  <w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
  <w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
  <w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
  <w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/>
  <w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
  <w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
  <w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
  <w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
  <w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
  <w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
  <w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
  <w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
  <w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
  <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
 </w:LatentStyles>
</xml><![endif]--> </p>
<p>本篇介绍groovy 的MetaClasses ，MetaClass 是Groovy 动态编程比较重要的组成。</p>
<p>(以下出现的代码片段是在groovy1.5.3测试通过，希望各位可以运行之)。</p>
<p>&nbsp;</p>
<p>1.MetaClass</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groovy中出现的每个类都有其对应的MetaClass。MetaClas是一个接口，该接口扩展了MetaObjectProtocol接口，这就是我们通常所说的MOP协议了。</p>
<p>MetaClass的实现类主要有&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/17445/6c3caa48-8d6c-31c4-b19a-3164052c9d00.jpg" height="133" alt="" width="254" />
</p>
<p>MetaClassImpl 是通用的实现类。ClosureMetaClass是闭包类特有的MetaClass。ExpandoMetaClass是用户扩展groovy类行为时用到的MetaClass</p>
<p>&nbsp;</p>
<pre name="code" class="java">println 'first:---&gt; '+'test'.metaClass

println 'String.metaClass:---&gt; '+String.metaClass

println 'after String.metaClass:---&gt;  '+'test'.metaClass</pre>
<p>&nbsp;</p>
<div class="quote_title"> 执行结果为</div>
<div class="quote_div">first:---&gt; groovy.lang.MetaClassImpl@183f74d[class java.lang.String]<br />
String.metaClass:---&gt; groovy.lang.ExpandoMetaClass@8a0d5d[class java.lang.String]<br />
after String.metaClass:---&gt;&nbsp; groovy.lang.ExpandoMetaClass@8a0d5d[class java.lang.String]</div>
<p>&nbsp;对于这样的结果你是不是会感觉到奇怪呢？</p>
<p>下面我将结合Groovy实现代码来解释这个过程</p>
<p><strong>第一句脚本</strong>
通过String实例对象来获得，Groovy为其初始化的groovy.lang.MetaClassImpl@183f74d[class java.lang.String]对象。这个对象将在MetaClassRegistryImpl中和String类关联起来。也就是注册了String.class和</p>
<p>groovy.lang.MetaClassImpl的对象关系。</p>
<p><strong>第二句脚本</strong>
通过String类去访问 metaClass对象，不过这一次是调用了类DefaultGroovyMethods中的方法</p>
<p>&nbsp;</p>
<pre name="code" class="java">    /**
     * Adds a &quot;metaClass&quot; property to all class objects so you can use the syntax
     * &lt;code&gt;String.metaClass.myMethod = { println &quot;foo&quot; }&lt;/code&gt;
     *
     * @param c The java.lang.Class instance
     * @return An MetaClass instance
     */
    public static MetaClass getMetaClass(Class c) {
        MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry();
        MetaClass mc = metaClassRegistry.getMetaClass(c);
        if (mc instanceof ExpandoMetaClass
                || mc instanceof DelegatingMetaClass &amp;&amp; ((DelegatingMetaClass) mc).getAdaptee() instanceof ExpandoMetaClass)
            return mc;
        else {
            MetaClass emc = ExpandoMetaClassCreationHandle.instance.create(c, metaClassRegistry);
            emc.initialize();
            metaClassRegistry.setMetaClass(c, emc);//并且在metaClassRegistry中注册
            return emc;
        }
    }</pre>
<p>&nbsp;第三句脚本又重新通过String实例对象来获得了，但这一次得到的是groovy.lang.ExpandoMetaClass@8a0d5d，这是因为第二句话中对String和其MetaClass对象进行了重新注册。</p>
<p>自此以后系统中所有的String对象的MetaClass对象都一直市是ExpandoMetaClass对象实例。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>由于我们举的String例子有点特殊</p>
<p>我们看看对于自定义类的例子</p>
<pre name="code" class="java">class Foo{
	
}
def f1 = new Foo();
println f1.metaClass

println Foo.metaClass

println f1.metaClass

def f2 = new Foo()
println f2.metaClass</pre>
<p>&nbsp;结果是不是又不一样了？</p>
<p>f1对象的metaClass是被缓存了，只有在调用过</p>
<pre name="code" class="java">Foo.metaClass
</pre>
<p>&nbsp;之后，new出来的对象才会使用ExpandoMetaClass</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/212082#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><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><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, 06 Jul 2008 18:11:46 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/212082</link>
        <guid>http://jimichan.javaeye.com/blog/212082</guid>
      </item>
      <item>
        <title>Facebook推出简体中文语言版本</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/205878" style="color:red;">http://jimichan.javaeye.com/blog/205878</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Facebook今日推出了简体中文语言版本.当中国大陆地区用户访问Facebook.com,将自动跳转到http://zh-cn.facebook.com/ 的页面上,页面显示为简体中文字符.
<br />
<br />
用户使用以前注册的帐号在该页面登陆后,将还是会进入到英文界面;而在该页面重新注册后,激活的帐号将显示中文界面.</p>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/205878#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Thu, 19 Jun 2008 16:44:51 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/205878</link>
        <guid>http://jimichan.javaeye.com/blog/205878</guid>
      </item>
      <item>
        <title>转：从玩具到游戏 看另类项目激励机制</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/195895" style="color:red;">http://jimichan.javaeye.com/blog/195895</a>&nbsp;
          发表时间: 2008年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>
				
					作者：<strong class="red">IT168 张逸</strong>
&nbsp;&nbsp;2008-04-14</p>
<p><a href="http://tech.it168.com/m/2008-04-14/200804140921137_1.shtml" target="_blank">http://tech.it168.com/m/2008-04-14/200804140921137_1.shtml</a></p>
<p>通过发奖金的形式来激励团队成员，本身就是一把双刃剑，弄得不好，可能就会破坏团结，导致彼此之间的矛盾与冲突，这对于一个团队而言是绝对致命的。然而，如果一个团队缺乏合理的激励方式，又无法调动成员的积极性。如何取舍，真是伤透脑筋。
</p>
<p>&nbsp;&nbsp;&nbsp; 看完这篇文章，我思索良久也没有寻求到一个好的答案。昨日阅读Larry L.
Constantine的《人件集&mdash;&mdash;人性化的软件开发》，才发现其实Constantine早已给出了答案，就在书中的第59章《受奖励的程序员》中。
原来，我们为什么要受限于发奖金这样一种形式呢？套用一句俗语说，&ldquo;提到钱，就难免伤感情了。&rdquo;要激励团队成员以及开发团队，我们还能够寻求到很好的方
式。</p>
<p>&nbsp;&nbsp;&nbsp; 概括起来，Constantine提出的激励机制包括如下内容：</p>
<p>&nbsp;&nbsp;&nbsp;
1、&ldquo;技术玩具&rdquo;。开发人员大多数都是技术型人才，一个通病就是对于技术的执著追求有时候甚至高于对金钱的追求（前题是他已经具有优裕的生活基础）。因
此，一套最新的正版软件工具，或者一件当前最酷的数字产品，都会让他们欣喜不已。这种&ldquo;投其所好&rdquo;的馈赠方式，既没有奖励金钱那么赤裸，又能够让开发人员
从内心深处激发对公司的认同与感激，真可谓两全其美。</p>
<p>&nbsp;&nbsp;&nbsp;
2、小礼品。书中写道：&ldquo;绝不要低估T恤衫的力量。各式各样的&lsquo;刺激&rsquo;手段&mdash;&mdash;团队夹克、特殊的领带、特别的杯子或者鼠标垫&mdash;&mdash;都是可以使用的方法，这
些，能够告诉那些取胜的团队以及团队成员：他们与别人不太一样。最好的团队还可以获得自己设计团队徽章样式的机会，并有公司负责找人生产。&rdquo;这种方式或许
是高层领导最愿意看到的，投入不多，却极尽蛊惑人心之能事，尤其是设计团队徽章的做法，既能够激发个人的集体荣誉感，又能够激励整个团队的战斗力。</p>
<p>&nbsp;&nbsp;&nbsp;
3、自由控制的时间。这里提出的自由时间，并不是奖励成员出去旅游或者度假，而是对于那些按时交付了高质量软件的开发人员，奖励他们能够在公司的上班时间
内，自由支配自己的工作，做自己感兴趣的事情（当然是与技术相关的）。例如，你可以自由自在地在没有最后期限的压力之下研究网格运算，或者神经网络，人工
智能，哪怕你所在的公司实际上只是从事SAP二次开发。</p>
<p>&nbsp;&nbsp;&nbsp; Rob
Thomsett说，按照他的经验，如果你把时间和钱放在一起让程序员挑选，大多数都更喜欢前者。而这类由公司赞助的研究活动，反过来对公司也是有益的，
不但是获得了一位拥有新技能和新点子的快乐的开发者，而且，没准儿还能得到一个新的软件或者其他什么有用的技术。这种奖励方法对整个团队可能更有意义。如
果一个项目团队显示出他们的高超的开发执行能力，当他们超越了公司建立的最好实践之上时，那么就应该对这个团队进行奖励，让他们可以无拘无束地选择研究和
开发项目。</p>
<p>&nbsp;&nbsp;&nbsp; 如果你的公司是一家研究型公司，或者从事产品开发，这样的奖励方式在激励成员以及团队工作热情的同时，或许还能得到意外的收获。最关键的是，这种做法无形中营造了公司的研究氛围，创造了一种良好的价值取向。</p>
<p>
4、教育与培训机会。特别对于具有进取心的开发人员而言，获得教育或培训的机会，绝对比获得奖金更加诱人。即使管理者担心教育与培训投入的成本太高，甚至
会造成人才流失的可能，那么，给团队人员一次参加技术大会的机会好了。这些大会往往都是免费的，开发人员需要获得的仅仅是你的一个许可而已。然而，已经足
见你的栽培之心了。Constantine还说道：&ldquo;报销书籍和杂志费用也是一种低费用的激励方式&rdquo;。管理者们，你们看到了吗？
</p>
<p>&nbsp;&nbsp;&nbsp;
5、选择团队成员的权利。权利也是一种奖励。例如让他主持一次会议，或者提供监督别人的机会，都是一种廉价的权利，但有可能得到的回报却很丰厚。最好的权
利就是允许团队成员能够挑选自己认可的合作者。书中提到：&ldquo;一旦一个小组已经学会了如何协同工作，为什么要把他们分开呢？对于那些能够高效开发的团队，奖
励方法之一就是让他们在下一个项目中继续共同工作。对这个方法进行一个推广，那么，我们可以让他们自行挑选工作伙伴，这种行为可以有效地激励员工，使他们
能够达到最好的工作效果。同理，让那些在上一批项目中干得最好的团队，在下一批项目中自由选择员工，对他们来说，也是一种奖励。&rdquo;还有什么比这个更加廉价
的奖励。</p>
<p>&nbsp;&nbsp;&nbsp; 除了以上提到的五点之外，Cockburn在《敏捷软件开发》一书中，还提到了Darin
Cummins发明的一种开发游戏的奖励方式，奖励一些类似于代金券之类的伪币，然后在项目结束后，利用这些伪币来竞拍一些真正适用的物品。关键不是这个
结果，而是开发中的过程，对于成员的奖励就像玩游戏一般轻松自在，不知不觉就剥去了成员的功利之心，有效地消除成员之间的恶性竞争。</p>
<p>&nbsp;&nbsp;&nbsp;
Darin写道：&ldquo;开发人员会因为他们的代码被评审、评审其他人的代码、按照进度完成任务、重用代码以及创建单元测试等得到奖励&rdquo;。要消除成员之间的恶性
竞争，这种方法一定要遵循两点。第一是将过程尽可能最小化，这样的度量会更加准确与透明，不会出现太大的分歧。第二则是给参与者反败为胜的机会。可以在开
发过程的结尾，设计一些额外的活动来让开发人员赚取更多的奖励。这样一来，即使开发人员在前面输得太多，他仍然有机会在后程发力，反败为胜。</p>
<p>&nbsp;&nbsp;&nbsp; 适当的奖励可以让我们踢开刀刃，自在轻舞，但必须还要谨记如下两个原则：</p>
<ul>
<li>在奖励优秀的开发人员的同时，不要忘记对优秀团队的奖励；</li>
<li>奖励方式应因人而异，必须最大程度地投合员工的喜好。</li>
</ul>
<p>&nbsp;&nbsp;&nbsp; 因此，在对你的团队以及员工进行奖励之前，最好先询问他们究竟喜欢什么，也许你能够以最小的投入换来最大的回报。坦白说，有时候上级也需要好好考虑如何对下级&ldquo;拍马屁&rdquo;呢。</p>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/195895#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/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>Fri, 23 May 2008 09:31:41 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/195895</link>
        <guid>http://jimichan.javaeye.com/blog/195895</guid>
      </item>
      <item>
        <title>用java好久，今天才知道初始化集合还可以这样写</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/190296" style="color:red;">http://jimichan.javaeye.com/blog/190296</a>&nbsp;
          发表时间: 2008年05月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
Set set = new HashSet() {{
           add(&quot;one&quot;);
           add(&quot;two&quot;);
}}
</pre>
<p>&nbsp;&nbsp;&nbsp; 不废话，如上的代码所示。</p>
<p>原来写代码，一直循规蹈矩这样子写</p>
<pre name="code" class="java">public class xx{
     Set set = new HashSet();
     xx(){
        set.add(&quot;one&quot;);
        set.add(&quot;two&quot;);
     }
} 
</pre>
<p>&nbsp;真的很麻烦！</p>
<p>原来无名内隐类还可以这样子来用哦，啊哈哈</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/190296#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 06 May 2008 16:53:31 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/190296</link>
        <guid>http://jimichan.javaeye.com/blog/190296</guid>
      </item>
      <item>
        <title>才发现的 纯css的圆角DIV解决方案</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/163784" style="color:red;">http://jimichan.javaeye.com/blog/163784</a>&nbsp;
          发表时间: 2008年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>纯css解决方案的网站地址 http://www.spiffycorners.com/</p><p>在如上的页面里面可以选择颜色来生成如下代码：</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><pre name="code" class="html">&lt;style type=&quot;text/css&quot;&gt;
.spiffy{display:block}
.spiffy *{
  display:block;
  height:1px;
  overflow:hidden;
  font-size:.01em;
  background:#56E69E}
.spiffy1{
  margin-left:3px;
  margin-right:3px;
  padding-left:1px;
  padding-right:1px;
  border-left:1px solid #b0eecf;
  border-right:1px solid #b0eecf;
  background:#7de9b3}
.spiffy2{
  margin-left:1px;
  margin-right:1px;
  padding-right:1px;
  padding-left:1px;
  border-left:1px solid #e5f3ec;
  border-right:1px solid #e5f3ec;
  background:#74e8ae}
.spiffy3{
  margin-left:1px;
  margin-right:1px;
  border-left:1px solid #74e8ae;
  border-right:1px solid #74e8ae;}
.spiffy4{
  border-left:1px solid #b0eecf;
  border-right:1px solid #b0eecf}
.spiffy5{
  border-left:1px solid #7de9b3;
  border-right:1px solid #7de9b3}
.spiffyfg{
  background:#56E69E}
&lt;/style&gt;</pre>&nbsp;<pre name="code" class="html">&lt;div&gt;
  &lt;b class=&quot;spiffy&quot;&gt;
  &lt;b class=&quot;spiffy1&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy2&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy3&quot;&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy4&quot;&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy5&quot;&gt;&lt;/b&gt;&lt;/b&gt;

  &lt;div class=&quot;spiffyfg&quot;&gt;
    &lt;!-- content goes here --&gt;
  &lt;/div&gt;

  &lt;b class=&quot;spiffy&quot;&gt;
  &lt;b class=&quot;spiffy5&quot;&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy4&quot;&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy3&quot;&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy2&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;
  &lt;b class=&quot;spiffy1&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;
&lt;/div&gt;</pre>&nbsp;<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/163784#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/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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Feb 2008 09:35:31 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/163784</link>
        <guid>http://jimichan.javaeye.com/blog/163784</guid>
      </item>
      <item>
        <title>请教关于使用PropertyOverrideConfigurer，怎么覆写 bean引用的问题</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/153702" style="color:red;">http://jimichan.javaeye.com/blog/153702</a>&nbsp;
          发表时间: 2008年01月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          大家都知道使用PropertyOverrideConfigurer配置覆盖string型的属性或者简单类型的属性非常简单<br />如 beanName.property=123<br />今天发现原来也可以设置List或者Map的<br />beanName.propertyList[0]=xx<br />beanName.propertyMap[key]=yyy<br /><br />但是怎样重新指定属性的引用呢？<br />如<br />beanName.property=bean1 （bean1是其它bean的ID）<br />但是会报错，我尝试这样beanName.property(ref)=bean1也同样报错！！！<br /><br />列位兄弟大家看看该咋办
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/153702#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><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><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>Mon, 07 Jan 2008 16:46:57 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/153702</link>
        <guid>http://jimichan.javaeye.com/blog/153702</guid>
      </item>
      <item>
        <title>调查：大家平时最爱上的技术网站是哪些？</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/122481" style="color:red;">http://jimichan.javaeye.com/blog/122481</a>&nbsp;
          发表时间: 2007年09月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="5">大家说说平时最爱上的技术网站是哪些？<br />
<br />
贴出来大家共享共享<img src="/javascripts/fckeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /></font>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/122481#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><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><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>Mon, 10 Sep 2007 08:50:24 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/122481</link>
        <guid>http://jimichan.javaeye.com/blog/122481</guid>
      </item>
      <item>
        <title>理解javascript的类构造函数</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/120605" style="color:red;">http://jimichan.javaeye.com/blog/120605</a>&nbsp;
          发表时间: 2007年09月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 我们经常使用new运行符去create 一个新的js对象，比如经常使用到的预定义类Date、String、Object、Function等等，这些都是宿主环境原型实现好了的。因为js可以面向对象的编程，所以我们可以自定义一些数据类型（也就类）。正如大家都知道的<br />
我们通过这样的代码创建一个类
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;Rectangle(w,&nbsp;h){&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.width&nbsp;=&nbsp;w;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.height&nbsp;=&nbsp;h;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
那么这个<strong>类定义function</strong>和其他的函数有什么特征？<br />
1.它使用new运行符调用<br />
2.执行时，它将被传入一个空的object，然后让this关键字来引用这个空对象，然后你的程序里就可以对这个空的对象进行初始化了。<br />
<br />
以上第二点是至关重要的，也可以说是构造函数运行的原理了。<br />
<br />
另外类构造函数一般是不包含return关键字的，它将返回那个this关键字所指向的对象。<br />
但是值得注意的是，这一点并没有被限制，你可以使用关键字return，当return关键字返回的function数据类型的对象是<br />
如 return function(){...}，那么new运算符将不会返回this对象，而是返回function数据类型的对象了。<br />
在mootools中的类继承机制就是利用了这一点！<br />
<br />
完毕！<br />
<br />
水平有限，如有疏忽，请兄弟没指正！
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/120605#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/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>Wed, 05 Sep 2007 13:13:07 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/120605</link>
        <guid>http://jimichan.javaeye.com/blog/120605</guid>
      </item>
      <item>
        <title>强烈推荐mootools替代prototype</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/120135" style="color:red;">http://jimichan.javaeye.com/blog/120135</a>&nbsp;
          发表时间: 2007年09月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="3"><a href="http://mootools.net/">mooTools</a>是一个简洁，模块化，面向对象的JavaScript框架。它能够帮助你更快，更简单地编写可扩展和兼容性强的JavaScript代码。<br />
<br />
Mootools跟prototype相类似，语法几乎一样。但它提供的功能要比prototype多，而且更强大。比如增加了动画特效、拖放操作等等。而且拥有强大而清晰的文档和示例帮助你轻松入门。<br />
<br />
它的下载页面更是酷的要命，即使下载全部功能也只有40K，而且它的源代码非常具有可读性，还有详细注解！<br />
所以建议大家使用mootools取代prototype.................</font>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/120135#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/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><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>Tue, 04 Sep 2007 08:56:13 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/120135</link>
        <guid>http://jimichan.javaeye.com/blog/120135</guid>
      </item>
      <item>
        <title>详解javascript类继承机制的原理</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/119815" style="color:red;">http://jimichan.javaeye.com/blog/119815</a>&nbsp;
          发表时间: 2007年09月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div align="center"><font size="3" face="Arial">&nbsp;本文着重解析javascript类继承机制，让你从底层了解javascript是怎样实现&ldquo;继承&rdquo;这一概念的。<br />
</font>
<div align="left">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; jimichan在javaeye博客发布，转载请说明。<br />
&nbsp;&nbsp;<font size="3"> <font size="2">目前 </font><font size="2" face="Arial">javascript的实现继承方式并不是通过&ldquo;extend&rdquo;关键字来实现的，而是通过</font></font><font size="2">constructor function和prototype属性来实现继承。首先我们创建一个<span><span>animal</span></span>类</font><br />
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c" start="1">
    <li class=""><span><span>&nbsp;</span><span class="keyword">var</span><span> </span></span>animal <span><span>=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;</span><span class="comment">//这就是constructor&nbsp;function&nbsp;了</span><span></span>&nbsp; <br />
    </span></li>
    <li class="alt"><span>&nbsp;&nbsp; <span class="keyword">this</span><span>.name&nbsp;=&nbsp;'pipi';&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.age&nbsp;=&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp; <span class="keyword">this</span><span>.height&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;<span class="comment">//建立一个动物的实例&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;<span class="keyword">var</span><span>&nbsp;a1&nbsp;=&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;animal&nbsp;();&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
<font size="2">构造函数与其他普通函数区别在于，1.构造函数里有 this关键字，2.调用构造函数是使用的new关键字。通过new运算符调用构造函数</font><span><span><font size="2">animal 后，系统就会返回一个对象，这个对象就相当于</font><br />
</span></span><span><span>
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;a1&nbsp;=&nbsp;{&nbsp;name:'pipi'&nbsp;,age:10,height:0&nbsp;}&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="comment">//或者</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">var</span><span>&nbsp;a1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Object();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>a1.name='pipi';&nbsp;&nbsp;</span></li>
    <li class=""><span>a1.age&nbsp;=&nbsp;10;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>a1.height&nbsp;=&nbsp;0;&nbsp; <br />
    </span></li>
</ol>
</div>
</span></span><font size="2"><span><span>等同这样的方式来产生js对象。<br />
<br />
到这里我们知道如何在js中定义一个类了，接下来我们展示如何写一个cat<br />
</span></span></font><br />
<div class="code_title">js 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-c" start="1">
    <li class="alt"><span><span class="keyword">var</span><span>&nbsp;cat&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">this</span><span>.play&nbsp;=&nbsp;</span><span class="keyword">function</span><span>(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;alert('cat&nbsp;play')&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;cat&nbsp;.prototype&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;animal&nbsp;();&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;<span class="comment">//prototype&nbsp;属性指向一个对象&nbsp;</span><span> <br />
    </span></span></li>
    <li class="alt"><span><span class="comment">var c1 = new cat();<br />
    </span></span></li>
</ol>
</div>
<br />
<font size="2"><span><span>到这里，cat就继承了</span></span></font><span><span>animal 对象，类cat的一个实例对象c1拥有属性name,age,height,和方法play了。<br />
那么</span></span><span>prototype起到了一个什么样的作用呢？<br />
</span><span>prototype就好比一个指针，它指向一个object，这个object就称为子类对象的原型。当cat的对象被创建的时候，由于cat的构造函数拥有prototype属性，那么cat的实例就会间接指向这个原型对象了（说成间接的是因为每个object都有一个</span>constructor 属性指向它的构造函数<span>）。<br />
那么问题来了，&ldquo;当我们修改对象 c1 的name属性的时候，会不会修改它prototype的name属性值呢？&rdquo;，答案是否定的。<br />
接下来详细解析：<br />
1.访问name属性： 首先当我们第一次访问c1.name的属性的时候，我们会得到值&ldquo;pipi&rdquo;，这个和我们预料中的一样。但是计算过程你未必知道。<br />
它计算的过程是这样的：第一步：检查c1对象中是否有name属性,找到的话就返回值，没有就跳到第二步，显然没有找到，因为cat的构造函数中没有定义。第二步：当第一步没有找时，去间接访问</span><span>prototype对象所指向的object，如果在</span><span>prototype对象中</span><span>找到的name属性的话，就返回找到的属性值。如果还是没有找到的话，再去递归地寻找</span><span>prototype对象的</span><span>prototype对象（去找它的爷爷）</span>，一直到找到name属性或者没有<span>prototype对象为止。如果到最后还是没有找到name属性的话就返回undefined。<br />
<br />
2.设定name属性：当我们设定c1对象的name属性时，及调用 c1.name= ' new name';&nbsp; 这个过程就简单多了。首先检查是否对象已有该属性，若已存在则修改当前值，若不存在则为该对象新增一个属性并设定当前值。值得一提的是，在设定值的过程中没有去访问</span><span>prototype属性。<br />
<br />
为了加深理解，我们再看一个 read-write-read 的过程，第一次read的时候，由于自己的对象没有name属性，那么就会返回的原型对象的name属性的值。第二步，写入name的值，同样没发现本身对象有name属性,那么就在本身对象上新建一个name属性，然后赋值。第三步，再次读取name属性，由于在第二步中已经新建了name属性，此时就返回在第二步中设定的值。值得一提的是，在这三步中没有改变原型对象的值。<br />
<br />
好了，到此详细分析了 javascript对象是如果实现继承的，其实和其他的面向对象语言不一样的是，javascript的继承机制是对象的原型继承而不是类型继承。<br />
<br />
呵呵，欢迎看完，有不对的地方欢迎大家讨论！<br />
</span><span> <br />
<br />
</span><span> <br />
</span><span><span></span></span></div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/119815#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/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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Sep 2007 16:00:00 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/119815</link>
        <guid>http://jimichan.javaeye.com/blog/119815</guid>
      </item>
      <item>
        <title>介绍:超web级工具FireBug，ajax调试利器</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/117921" style="color:red;">http://jimichan.javaeye.com/blog/117921</a>&nbsp;
          发表时间: 2007年08月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www.getfirebug.com/html1.gif"><img src="http://www.getfirebug.com/html1.gif" height="262" alt="" width="574" /></a><br />
<br />
<font size="4"><a href="http://www.getfirebug.com/">Firebug</a>是目前超强大的web开发工具，功能很全面，但是只在firefox中可用，下面一一介绍：<br />
<br />
用firebug你可以在任何一个页面上 edit, debug, and monitor CSS, HTML, and JavaScript ，甚至可以动态修改dom树和css。<br />
只要你安装上它，你会发现再也离不开他啦！<br />
1.跟踪HTML，很容易找到页面上的某一个区域的HTml在哪里<br />
2.js断点调试<br />
3.css调试<br />
4.dom树分析<br />
5.网络检测，跟踪每一个请求，可以查看请求和响应的所有内容，可以帮你发现性能瓶颈，同时也是一个很好的hack工具和ajax调试工具<br />
<br />
呵呵，还没用过的哥们趁早啦<img src="/javascripts/fckeditor/editor/images/smiley/msn/wink_smile.gif" alt="" /></font><br />
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/117921#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/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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 29 Aug 2007 12:42:14 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/117921</link>
        <guid>http://jimichan.javaeye.com/blog/117921</guid>
      </item>
      <item>
        <title>SwfUpload浏览器端上传组件,可显示进度条，可定制UI，可多文件上传</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/117494" style="color:red;">http://jimichan.javaeye.com/blog/117494</a>&nbsp;
          发表时间: 2007年08月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="4"><br />
SwfUpload浏览器端上传组件,可显示进度条，可定制UI，可多文件上传<br />
<br />
swfupload项目的地址是<a href="http://swfupload.mammon.se/" target="_blank">http://swfupload.mammon.se/ </a><br />
<br />
该项目的原理是利用js和flash的上传组件的交互，获得上传进度的信息。采用事件机制回调各种事件的响应函数，使得你可以自己定制UI组件而不受flash的约束，总之是一个不可多得的好东西。<br />
<br />
在使用过程中，值得注意的地方是在flash中访问服务器的相对路径时，它相对的是flash文件的路径，而不是flash所在html的路径！<br />
废话无多，请下载我写的示例吧，服务器端只演示使用apache upload组件来接受文件的方式。<img src="/javascripts/fckeditor/editor/images/smiley/msn/teeth_smile.gif" alt="" /><br />
<br />
<a href="http://jimichan.javaeye.com/upload/picture/pic/4949/8c1c2ef1-025d-46e7-97f1-9a2c0b5e9fe2.jpg"><img src="http://jimichan.javaeye.com/upload/picture/pic/4949/8c1c2ef1-025d-46e7-97f1-9a2c0b5e9fe2.jpg" height="360" alt="" width="387" /></a></font>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/117494#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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, 28 Aug 2007 12:26:35 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/117494</link>
        <guid>http://jimichan.javaeye.com/blog/117494</guid>
      </item>
      <item>
        <title>Struts2 Wildcard Mappings用法之访问tiles定义</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/115689" style="color:red;">http://jimichan.javaeye.com/blog/115689</a>&nbsp;
          发表时间: 2007年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          哈哈，终于可以用struts2了。以前没用过webwork，几天看下来，觉得这种mvc比较强。<br />原来在struts 1 中访问tiles定义的页面需要配置org.apache.struts.tiles.actions.DefinitionDispatcherAction，真是很麻烦！<br />到如今的struts2中可以使用强大的通配符action配置就可以轻松搞定，配置如下：<br /><br /><pre name="code" class="java">&lt;action name="tiles-*">

&lt;result type="tiles">{1}&lt;/result>

&lt;/action></pre><br /><br />访问tiles定义bar,通过url: tiles-bar.action就可以了。<br />继续学习Struts2!!就这么简单<img src="/images/smiles/icon_idea.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/115689#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><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><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, 23 Aug 2007 16:19:03 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/115689</link>
        <guid>http://jimichan.javaeye.com/blog/115689</guid>
      </item>
      <item>
        <title>扩展prototype的触发事件的方法，兼容IE firefox</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/115688" style="color:red;">http://jimichan.javaeye.com/blog/115688</a>&nbsp;
          发表时间: 2007年08月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>脚本如下</strong><br /><pre name="code" class="java">Object.extend(Event, {
fireEvent:function(/*element Id or it Self*/sElement,/*event Name ,eg. change */sEvent){
if(document.all) {
$(sElement).fireEvent('on'+sEvent);
}else{
var evt = document.createEvent('HTMLEvents');
evt.initEvent(sEvent,true,true);
$(sElement).dispatchEvent(evt);
}
}
}
)</pre><br />这样就方便多了，哈哈
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/115688#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 23 Aug 2007 16:13:27 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/115688</link>
        <guid>http://jimichan.javaeye.com/blog/115688</guid>
      </item>
      <item>
        <title>struts 2 .0.6 版本时 文件上传</title>
        <author>jimichan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jimichan.javaeye.com">jimichan</a>&nbsp;
          链接：<a href="http://jimichan.javaeye.com/blog/66691" style="color:red;">http://jimichan.javaeye.com/blog/66691</a>&nbsp;
          发表时间: 2007年03月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font size="4">今天在试用struts2时碰到文件上传的问题。最后发现必须配置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.apache.struts2.dispatcher.ActionContextCleanUp才可以正常工作，而且我没有并在文档中发现这个说明。希望大家不再遇到同样的问题</font>
          <br/>
          <span style="color:red;">
            <a href="http://jimichan.javaeye.com/blog/66691#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/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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 Mar 2007 15:44:05 +0800</pubDate>
        <link>http://jimichan.javaeye.com/blog/66691</link>
        <guid>http://jimichan.javaeye.com/blog/66691</guid>
      </item>
  </channel>
</rss>