Objenesis二十秒教程

該文檔翻譯自Objenesis官方文檔
原文鏈接:http://objenesis.org/tutorial.html

二十秒教程

在Objenesis中有兩個主要的接口:

  • ObjectInstatiator - 初始化一個單獨的類的多個實例
  • InstantiatorStrategy - 一個特定的策略來決定怎么實力化一個類(對不同類型的類這個策略是不同的)

注意:所有的Objenesis類都位于oeg.objenesis包中

一步步進行

Objenesis使用了許多不同的策略來基于JVM提供商、JVM版本進行實例化對象,從而SecurityManager和class的類型將被實例化。

我們已經定義了兩種不同種類的必要的實例:

  • Standard - 沒有構造方法被調用
  • Serializable compliant - 表現的像是一個對象被通過java標準的序列化而被實例化。這意味著第一個不可序列化的父類的構造方法將被調用。然而,readResolve沒有被調用,并且如果這個對象是可序列化的那么我們將從不檢查它。

使用Objenesis最簡單的方法是通過使用ObjenesisStd(Standard)和ObjenesisSerializer(Serializable compliant)。默認地,將會自動地決定使用哪種策略--所以你沒必要指定。

Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer

一旦你有了這個Objenesis的實現,就能夠在接下來為一個具體的類型創建一個ObjectInstantiator

ObjectInstantiator thingyInstantiator = objenesis.getInstantiatorOf(MyThingy.class);

最終,你能使用它來為這個類型來實例化新的實例。

MyThingy thingy1 = (MyThingy)thingyInstantiator.newInstance();
MyThingy thingy2 = (MyThingy)thingyInstantiator.newInstance();
MyThingy thingy3 = (MyThingy)thingyInstantiator.newInstance();

性能和線程

為了提高性能,最好能夠盡可能地重用ObjectInstantiator對象。比如,如果你正在實例化一個類的多個實例,請通過同一個ObjectInstantiator進行。

InstantiatorStrategyObjectInstantiator兩者都能夠在多線程和并發情況下共享。它們是線程安全的。

完整代碼

Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer
MyThingy thingy1 = (MyThingy) objenesis.newInstance(MyThingy.class);

// or (a little bit more efficient if you need to create many objects)

Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer
ObjectInstantiator thingyInstantiator = objenesis.getInstantiatorOf(MyThingy.class);

MyThingy thingy2 = (MyThingy)thingyInstantiator.newInstance();
MyThingy thingy3 = (MyThingy)thingyInstantiator.newInstance();
MyThingy thingy4 = (MyThingy)thingyInstantiator.newInstance();
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • JAVA序列化機制的深入研究 對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整...
    時待吾閱讀 10,931評論 0 24
  • 2017年7月6日,坐標深圳,應屆生一枚,白紙的經驗,彩色的心。
    想變魔鬼的天使閱讀 187評論 0 2
  • 春申君黃歇,生于楚之云夢澤,為民為國不辭勞苦,終是逾越權限被人所害。一句“日暮江南無主人,彌令過客思公子。蕭條寒景...
    柳之尺閱讀 1,704評論 4 8