前幾天接觸到了<code>apache</code>的一個小架構<code>DbUtils</code>,真的被其優雅的設計所震撼到了,尤其是其中的
當時真的是感覺到很是神奇,僅僅是指定了一下那個Bean類的全名,就能從資料庫結果集中自動的生成我們需要的Bean對象,真的是太優雅了。然後我就翻了翻源碼,然後尴尬的發現自己能力有限,并不能真正做出那樣強大而且優雅的東西。
雖然寫不了那樣強大的架構,但是模拟一下還是可行的嘛,我在源碼中看到了反射技術的影子,然後就惡補了一下相關的知識點。細節方面主要是使用到了<code>PropertyDescriptor</code>這個類,以及相關的<code>getReadMethod</code>和<code>getWriteMethod</code>。說白了就是實作setter和getter方法。
下面是一個簡單的入門級的小例子
經過了上面的小例子,那我們就具備了給單個的<code>Property</code>指派的實作了,至于怎麼給一個Bean的所有的<code>Property</code>指派,請接着往下看。
<code>beanClass.getDeclaredFields()</code>.有了這行代碼,我們就可以接着下一步了。
為了接下來的測試成功,我們先new出來幾個Bean吧。分别如下:
接下來就是重頭戲了。
下面就來一起看看振奮人心的結果吧。
反射技術對于泛型的使用可謂是登峰造極了。這樣做的好處不言而喻。
今天代碼中的閃光點在于:
<code>String.subString();</code> // 分割字元串,實作bean的全名轉化成可反射的字元串類型
<code>Map<String,Object></code>的使用,好處在于模拟了<code>ResultSet</code>,提供了素材
<code>Class<T> bean</code>的使用,神奇的一種方式啊。泛型的優點可不僅僅在這裡能看到啊。:-)
好了,今天的分享就先到這裡吧。希望這個思路能給看到這篇文章的童鞋一絲啟發,開發出專屬于自己的一套小工具。