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阅读 135,273评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 11,005评论 0 24
  • 2017年7月6日,坐标深圳,应届生一枚,白纸的经验,彩色的心。
    想变魔鬼的天使阅读 190评论 0 2
  • 春申君黄歇,生于楚之云梦泽,为民为国不辞劳苦,终是逾越权限被人所害。一句“日暮江南无主人,弥令过客思公子。萧条寒景...
    柳之尺阅读 1,751评论 4 8