本文共 1763 字,大约阅读时间需要 5 分钟。
在阅读Spring源码的过程中,我偶然发现了Objenesis这个库。经过进一步研究和实践,以下是我对Objenesis的理解和使用体会。
Objenesis是一个专注于为特定类创建实例的小型框架。它通过动态代码生成的方式,能够绕过常见的Java对象创建限制,例如:
通过Objenesis,我们可以轻松地创建这些看似难以处理的类实例。
在项目中引入Objenesis,可以通过以下Maven依赖:
org.objenesis objenesis 3.0.1
让我们以一个简单的示例来说明如何使用Objenesis框架:
public class Person { public Person() { System.out.println("Person constructor 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.newInstance()会抛出异常 // Person p = Person.class.newInstance(); // 使用Objenesis创建实例 Objenesis objenesis = new ObjenesisStd(); ObjectInstantiator instantiator = objenesis.getInstantiatorOf(Person.class); Person person = instantiator.newInstance(); person.show(); Person person1 = instantiator.newInstance(); person1.show(); }} 运行上述代码,输出结果如下:
Person show function invokedcom.example.demo.objenesis.Person@27bc2616Person show function invokedcom.example.demo.objenesis.Person@3941a79c
与传统的Class.newInstance()方法相比,Objenesis能够成功绕过构造函数抛出的异常,轻松创建出实例。
IllegalAccessException。通过以上内容可以看出,Objenesis为Java对象创建提供了一种灵活的解决方案,特别适用于那些传统方式难以处理的场景。
转载地址:http://pssfk.baihongyu.com/