精华内容
下载资源
问答
  • objenesis

    千次阅读 2017-08-26 23:38:37
    转自http://blog.csdn.net/codershamo/article/details/52015206objenesis简介:objenesis是一个小型Java类库用来实例化一个特定class的对象。使用场合:Java已经支持使用Class.newInstance()动态实例化类的实例。...

    转自http://blog.csdn.net/codershamo/article/details/52015206

    objenesis简介:

    objenesis是一个小型Java类库用来实例化一个特定class的对象。

    使用场合:

    Java已经支持使用Class.newInstance()动态实例化类的实例。但是类必须拥有一个合适的构造器。有很多场景下不能使用这种方式实例化类,比如:

    • 构造器需要参数

    • 构造器有side effects

    • 构造器会抛异常

    因此,在类库中经常会有类必须拥有一个默认构造器的限制。Objenesis通过绕开对象实例构造器来克服这个限制。

    典型使用

    实例化一个对象而不调用构造器是一个特殊的任务,然而在一些特定的场合是有用的:

    • 序列化,远程调用和持久化 -对象需要实例化并存储为到一个特殊的状态,而没有调用代码。

    • 代理,AOP库和Mock对象 -类可以被子类继承而子类不用担心父类的构造器

    • 容器框架 -对象可以以非标准的方式被动态实例化。

    快速入门

    Objenesis有两个主要的接口:

    ObjectInstantiator -实例化一个类的多个实例

    interface ObjectInstantiator{
        Object new Instance();
    }
      
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    InstantiatorStrategy -对一个类的实例化进行特殊的策略处理(随着类的不同而不同)

    interface InstantiatorStrategy{
        ObjectInstantiator newInstantiaorOf(Class type);    
    }
     
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    注意:所有的Objenesis类都在org.objenesis包中

    使用方法

    根据jvm供应商,版本和类的安全管理和类型的不同, Objenesis实例化对象有许多不同的策略。 
    有两种不同种类的实例化是必需的:

    • Stardard -没有构造器会被调用

    • Serilizable compliant -与java标准序列化方式实例一个对象的行为一致。即第一个不可序列化的父类构造器将被调用。 但是,readResolve不会被调用并且不检查对象是否是可序列化的。

    最简单的使用Objenesis的方法是使用ObjenesisStd(Standard) 和ObjenesisSerializer(Serializable compliant)。这两种方式会自动选择最好的策略。

    Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerialializer
     
    • 1
    • 1

    实现Objenesis接口后,就可以为一个特定的类型创建一个ObjectInstantiator

    ObjectInstantiator thingInstantiator = objenesis.getInstantiatorOf(MyThingy.class);
     
    • 1
    • 1

    最后,可以使用这个去新建实例

    MyThingy thingy1 = (MyThingy)thingyInstantiator.newInstnace();
    MyThingy thingy2 = (MyThingy)thingInstantiator.newInstance();
     
    • 1
    • 2
    • 1
    • 2

    性能和多线程

    为了提高性能,最好尽可能多的使用ObjectInstantiator 对象。 例如,如果要实例化一个类的多个对象,请使用相同的ObjectInstantiator。 
    InstantiatorStrategy和ObjectInstantiator都可以在多线程中共享并发使用,它们是线程安全的。

    代码示例:

    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();
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (译自 http://objenesis.org/


    展开全文
  • objenesis-3.1.jar

    2021-01-10 14:38:13
    objenesis-3.1.j
  • objenesis-2.6.jar

    2021-01-08 17:06:51
    objenesis-2.6.jar
  • objenesis-parent-3.1.pom

    2021-01-10 14:40:11
    objenesis-parent-3.1.pomobjenesis-parent-3.1.pom
  • Objenesis Objenesis is a library dedicated to bypass the constructor when creating an object. On any JVM there is. You can find the website and user documentation at objenesis.org. Developer ...
  • objenesis.rar

    2011-03-08 22:18:20
    使用 easymock出现如下错:java.lang.NoClassDefFoundError: org/objenesis/ObjenesisHelper 可能使用到些压缩文件下的jar包
  • spring-cglib-objenesis.jar

    2017-12-13 10:21:00
    spring-cglib-repack-3.2.5和spring-objenesis-repack-2.6jar下载
  • EasyMock用到的objenesis

    2010-06-30 22:29:35
    EasyMock用到的objenesis
  • objenesis-1.2.jar

    2019-07-04 10:58:22
    <value>file:///root/apache-hive-1.2.1-bin/lib/minlog-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/objenesis-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/reflectasm-1.07-shaded.jar ...
  • spring查看源码所需要的jar 之二 spring-objenesis-repack-3.0.1
  • Objenesis 快速入门教程

    千次阅读 2016-10-29 15:32:50
    Objenesis是一个轻量级的Java库,作用是绕过构造器创建一个实例。 Objenesis is a small Java library that serves one purpose: To instantiate a new object of a particular class. Java已经支持通过Class....

    Objenesis是一个轻量级的Java库,作用是绕过构造器创建一个实例。

    Objenesis is a small Java library that serves one purpose:

    To instantiate a new object of a particular class.

    Java已经支持通过Class.newInstance()动态实例化Java类,但是这需要Java类有个适当的构造器。很多时候一个Java类无法通过这种途径创建,例如:

    • 构造器需要参数
    • 构造器有副作用
    • 构造器会抛出异常

    Objenesis可以绕过上述限制。它一般用于:

    • 序列化、远程处理和持久化:无需调用代码即可将Java类实例化并存储特定状态。
    • 代理、AOP库和Mock对象:可以创建特定Java类的子类而无需考虑super()构造器。
    • 容器框架:可以用非标准方式动态实例化Java类。例如Spring引入Objenesis后,Bean不再必须提供无参构造器了。

    接口介绍

    Objenesis中有两个重要的接口:

    ObjectInstantiator - Instantiates multiple instances of a single class.

    interface ObjectInstantiator {
      Object newInstance();
    }

    InstantiatorStrategy - A particular strategy for how to instantiate a class (as this differs for different types of classes).

    interface InstantiatorStrategy {
      ObjectInstantiator newInstantiatorOf(Class type);
    }

    Note: All Objenesis classes are in the org.objenesis package.

    具体示例

    There are many different strategies that Objenesis uses for
    instantiating objects based on the JVM vendor, JVM version,
    SecurityManager and type of class being instantiated.

    We have defined that two different kinds of instantiation are
    required:

    • Stardard - No constructor will be called
    • Serializable compliant - Acts
      like an object instantiated by java standard serialization. It means
      that the constructor of the first non-serializable parent class will
      be called. However, readResolve is not called and we never check if
      the object is serializable.

    The simplest way to use Objenesis is by
    using ObjenesisStd (Standard) and ObjenesisSerializer (Serializable
    compliant). By default, automatically determines the best strategy -
    so you don’t have to.

    1.构造ObjenesisStd

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

    2.有了Objenesis 就可以通过getInstantiatorOf方法创建ObjectInstantiator对象了

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

    3.实例化某个具体的类

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

    性能

    InstantiatorStrategy 和ObjectInstantiator 类都是线程安全的,可以在多线程环境下共享使用。

    To improve performance, it is best to reuse the ObjectInstantiator objects as much as possible. For example, if you are instantiating multiple instances of a specific class, do it from the same ObjectInstantiator.

    Both InstantiatorStrategy and ObjectInstantiator can be shared between multiple threads and used concurrently. They are thread safe.

    参考资料

    Twenty Second Tutorial:http://objenesis.org/tutorial.html

    展开全文
  • Objenesis创建类的实例

    2020-07-27 10:45:37
    我在读spring源码的时候,发现了Objenesis这个东西,网上查阅一番,总结一下。 Objenesis是一个小型的专门为特定的类创建实例的框架。 java中已经有了Class.newInstance()方法来创建对象,但是某些情况下并不...

             我在读spring源码的时候,发现了Objenesis这个东西,网上查阅一番,总结一下。

             Objenesis是一个小型的专门为特定的类创建实例的框架。

             java中已经有了Class.newInstance()方法来创建对象,但是某些情况下并不合适,例如私有构造方法,带参数的构造方法,还有构造方法抛异常的,但是通过Objenesis框架却能很好的创建出这些对象。下面就来演示一下Objenesis框架的使用。

             1.先引入依赖

              

    <dependency>
                <groupId>org.objenesis</groupId>
                <artifactId>objenesis</artifactId>
                <version>3.0.1</version>
            </dependency>

             2.测试

    public class Person {
    
        public Person(){
            System.out.println("Person consturct function invoked");
            throw new RuntimeException();
        }
    
        public void show(){
            System.out.println("Person show function invoked" + this);
        }
    
        public static void main(String[] args) throws IllegalAccessException, InstantiationException {
    //        Class<Person> clazz = Person.class;
    //        Person p = clazz.newInstance();
    //        p.show();
    
            Objenesis objenesis = new ObjenesisStd();
            ObjectInstantiator<Person> instantiator = objenesis.getInstantiatorOf(Person.class);
            Person person = instantiator.newInstance();
            person.show();
            Person person1 = instantiator.newInstance();
            person1.show();
        }
    }

         3.运行结果

     

    Person show function invokedcom.example.demo.objenesis.Person@27bc2616
    Person show function invokedcom.example.demo.objenesis.Person@3941a79c

         当我们使用Class.newInstance()方法时,由于构造方法抛异常了,所以会报错。但是使用Objenesis框架,却能很容易的就构造出类实例。

    展开全文
  • spring-objenesis-repack-2.6.jar 文件大小:58218 字节 修改时间:2018年8月26日 09:12:10 MD5 :44E73A854CCF28A7D03B79AACA35463D SHA1 :46118BF9532CF4E407A097FABFA7DFE419B8151C CRC32 :4F8364D8
  • 不使用构造方法创建Java对象: objenesis的基本使用方法 objenesis简介: objenesis是一个小型java类库用来实例化一个特定class的对象。由于不是所有的类都有无参构造器又或者类构造器是private,在这样的情况下,...

    不使用构造方法创建Java对象: objenesis的基本使用方法

    objenesis简介:

    objenesis是一个小型java类库用来实例化一个特定class的对象。由于不是所有的类都有无参构造器又或者类构造器是private,在这样的情况下,如果我们还想实例化对象,class.newInstance是无法满足的。

    使用场合:

    Java已经支持使用Class.newInstance()动态实例化类的实例。但是类必须拥有一个合适的构造器。有很多场景下不能使用这种方式实例化类,比如:

    • 构造器需要参数

    • 构造器有side effects

    • 构造器会抛异常

    因此,在类库中经常会有类必须拥有一个默认构造器的限制。Objenesis通过绕开对象实例构造器来克服这个限制。

    典型使用

    实例化一个对象而不调用构造器是一个特殊的任务,然而在一些特定的场合是有用的:

    • 序列化,远程调用和持久化 -对象需要实例化并存储为到一个特殊的状态,而没有调用代码。

    • 代理,AOP库和Mock对象 -类可以被子类继承而子类不用担心父类的构造器

    • 容器框架 -对象可以以非标准的方式被动态实例化。

    快速入门

    Objenesis有两个主要的接口:

    ObjectInstantiator -实例化一个类的多个实例

    • ObjectInstantiator - Instantiates multiple instances of a single class.
      interface ObjectInstantiator {
        Object newInstance();
      }
    • InstantiatorStrategy - A particular strategy for how to instantiate a class (as this differs for different types of classes).
      interface InstantiatorStrategy {
        ObjectInstantiator newInstantiatorOf(Class type);
      }

    Note: All Objenesis classes are in the org.objenesis package.

    使用方法

    根据jvm供应商,版本和类的安全管理和类型的不同, Objenesis实例化对象有许多不同的策略。
    有两种不同种类的实例化是必需的:

    • Stardard -没有构造器会被调用

    • Serilizable compliant -与java标准序列化方式实例一个对象的行为一致。即第一个不可序列化的父类构造器将被调用。 但是,readResolve不会被调用并且不检查对象是否是可序列化的。

    最简单的使用Objenesis的方法是使用ObjenesisStd(Standard) 和ObjenesisSerializer(Serializable compliant)。这两种方式会自动选择最好的策略。

    Objenesis objenesis = new ObjenesisStd(); // or ObjenesisSerializer
    Once you have the Objenesis implementation, you can then create an ObjectInstantiator, for a specific type.
    
    ObjectInstantiator thingyInstantiator = objenesis.getInstantiatorOf(MyThingy.class);
    Finally, you can use this to instantiate new instances of this type.
    
    MyThingy thingy1 = (MyThingy)thingyInstantiator.newInstance();
    MyThingy thingy2 = (MyThingy)thingyInstantiator.newInstance();
    MyThingy thingy3 = (MyThingy)thingyInstantiator.newInstance();

    性能和多线程

    为了提高性能,最好尽可能多的使用ObjectInstantiator 对象。 例如,如果要实例化一个类的多个对象,请使用相同的ObjectInstantiator。
    InstantiatorStrategy和ObjectInstantiator都可以在多线程中共享并发使用,它们是线程安全的。

    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-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar,解决了spring源码编译后缺少的cglib和objenesis的问题。
  • 背景前提 项目基于springboot 1.5.6RELEASE 问题描述 普通环境启动项目正常 docker环境启动项目异常报错 ... nested exception is java.lang.NoClassDefFoundError: org/objenesis/Objenesis 排查流程 ...
  • spring-objenesis-repack-2.6.jar,spring源码需要jar文件
  • Objenesis实例化对象

    2019-07-02 14:37:20
    我们使用class.newInstance()可以创建一个对象,但是这个类必须要有无参构造函数,如果我们不显示的写出来,JVM也会为我们自动生成一个无参的构造函数,...Objenesis通过绕开对象实例构造器来克服这个限制。 pac...
  • Spring源码出错,缺失cglib.3.2.6 与 objenesis.2.6这两个jar包,下载后放入eclipse提示的工程的相应路径即可
  • spring-objenesis-repack-2.2.jar是spring源码4.2.x以上版本需要的jar文件,网上资料很少,在这里分享给大家。
  • Project 'spring-expression' is missing required library: 'G:\github\workspace\Spring-framework\spring-core\build\libs\spring-objenesis-repack-3.0.1.jar,解决spring源码导入错误缺少的jar,网上很少有资源...
  • Spring源码编译时缺少的三个类, spring-cglib-repack-3.2.0.jar,spring-objenesis-2.2.jar,castor-1.2.jar
  • Flink整合Kafka报objenesis

    2020-06-15 17:25:44
    但是在加载Kafka的数据时报objenesis异常,但是代码中没有使用POJO类。 二.异常信息 D:\Users\Administrator\jdk1.8.0_66\bin\java -Didea.launcher.port=7536 -Didea.launcher.bin.path=D:\Users\Administrator\...
  • objenesis的实现与性能测试

    千次阅读 2015-09-25 17:43:14
    最近看kryo的源码发现使用了一个叫做objenesis的java库,主要是用在创建对象上面,它可以不用调用构造函数就创建对象。由于并不是所有的java类都有无参构造函数,并且有的类的构造函数还是private的,所以更甚有些类...
  • idea构建spring源码,所缺少的2个jar包。spring-cglib-repack-3.2.6.jar,spring-objenesis-repack-2.6.jar

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,473
精华内容 989
关键字:

Objenesis