This commit is contained in:
wentch
2016-01-23 16:42:06 +08:00
parent e437996365
commit 42a4d39a6d

View File

@@ -197,8 +197,8 @@
</pre></div>
<br/>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convert 支持非空构造函数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. <b>public</b>非空构造函数加上 @java.beans.ConstructorProperties 注解:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convert 支持带参数构造函数。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. <b>public</b> 带参数的构造函数加上 @java.beans.ConstructorProperties 注解:</p>
<div class="highlight"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserRecord</span> <span class="o">{</span>
<span class="kd">private</span> <span class="kt">int</span> <span class="n">userid</span><span class="o">;</span>
@@ -226,7 +226,7 @@
<span class="k">return</span> <span class="n">password</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span></pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. <b>public</b> 的非空构造函数类自定义Creator</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 自定义Creator</p>
<div class="highlight"><pre><span class="kd">public</span> <span class="kd">class</span> <span class="nc">UserRecord</span> <span class="o">{</span>
<span class="kd">private</span> <span class="kt">int</span> <span class="n">userid</span><span class="o">;</span>
@@ -254,7 +254,7 @@
<span class="o">}</span>
<span class="cm">/**</span>
<span class="cm"> * 无法提供public的构造函数可以自定义Creator方法。</span>
<span class="cm"> * 自定义Creator方法。</span>
<span class="cm"> * 1) 方法名可以随意。</span>
<span class="cm"> * 2) 方法必须是static。</span>
<span class="cm"> * 3方法的参数必须为空。</span>
@@ -265,7 +265,7 @@
<span class="kd">private</span> <span class="kd">static</span> <span class="n">Creator</span><span class="o">&lt;</span><span class="n">UserRecord</span><span class="o">&gt;</span> <span class="nf">creator</span><span class="o">()</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">new</span> <span class="n">Creator</span><span class="o">&lt;</span><span class="n">UserRecord</span><span class="o">&gt;()</span> <span class="o">{</span>
<span class="nd">@Override</span>
<span class="nd">@Creator.ConstructorParameters</span><span class="o">({</span><span class="s">&quot;userid&quot;</span><span class="o">,</span> <span class="s">&quot;username&quot;</span><span class="o">,</span> <span class="s">&quot;password&quot;</span><span class="o">})</span> <span class="c1">//非空构造函数必须有ConstructorParameters注解</span>
<span class="nd">@Creator.ConstructorParameters</span><span class="o">({</span><span class="s">&quot;userid&quot;</span><span class="o">,</span> <span class="s">&quot;username&quot;</span><span class="o">,</span> <span class="s">&quot;password&quot;</span><span class="o">})</span> <span class="c1">//带参数的构造函数必须有ConstructorParameters注解</span>
<span class="kd">public</span> <span class="n">UserRecord</span> <span class="nf">create</span><span class="o">(</span><span class="n">Object</span><span class="o">...</span> <span class="n">params</span><span class="o">)</span> <span class="o">{</span>
<span class="k">return</span> <span class="k">new</span> <span class="nf">UserRecord</span><span class="o">((</span><span class="n">params</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="mi">0</span> <span class="o">:</span> <span class="o">(</span><span class="n">Integer</span><span class="o">)</span> <span class="n">params</span><span class="o">[</span><span class="mi">0</span><span class="o">]),</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">params</span><span class="o">[</span><span class="mi">1</span><span class="o">],</span> <span class="o">(</span><span class="n">String</span><span class="o">)</span> <span class="n">params</span><span class="o">[</span><span class="mi">2</span><span class="o">]);</span>
<span class="o">}</span>
@@ -273,6 +273,7 @@
<span class="o">}</span>
<span class="o">}</span>
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通常JavaBean类默认有个public空参数的构造函数因此大部分情况下不要自定义Creator其实只要不是private的空参数构造函数Convert都能自动支持(其他的框架都仅支持public的构造函数)只有仅含private的构造函数才需要自定义Creator。带参数的构造函数就需要标记@java.beans.ConstructorProperties当然若使用Java 8的新特性带上 -parameters 编译项进行编译的类连@ConstructorProperties都可以省掉Convert会自动匹配参数名动态生成Creator。</p>
<br/>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Convert 支持自定义Decode、Encode。</p>
@@ -389,6 +390,7 @@
<span class="o">}</span>
</pre></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由上可以看出Convert的自定义配置完全符合面向对象思想提倡在JavaBean内部去自定义非常规的构造函数或Decode、Encode方法通过Factory显式配置的方式通常用于非自己定义的数据类(如 java.io.File)。</p>
<br/>
<h3><a id="convert_bson_struct" class="anchor" href="#" aria-hidden="true"><span class="octicon octicon-link"></span></a>BSON的协议格式</h3>