Objenesis二十秒教程

2015-12-22  本文已影响987人  JohnShen

该文档翻译自Objenesis官方文档
原文链接:http://objenesis.org/tutorial.html

二十秒教程

在Objenesis中有两个主要的接口:

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

一步步进行

Objenesis使用了许多不同的策略来基于JVM提供商、JVM版本进行实例化对象,从而SecurityManager和class的类型将被实例化。

我们已经定义了两种不同种类的必要的实例:

使用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();
上一篇下一篇

猜你喜欢

热点阅读