【问题标题】:Create a dynamic proxy for a class without no-argument constructor为没有无参数构造函数的类创建动态代理
【发布时间】:2014-05-23 10:52:45
【问题描述】:

我想为类而不是接口创建代理。有一些答案描述了为此目的使用 cglib 或 Javassist(例如https://stackoverflow.com/a/4449998/),但我遇到了麻烦,因为我对代理感兴趣的类没有无参数构造函数,所以Enhancer.create()抛出异常。查看 Javassist ProxyFactory javadoc,它也需要构造函数参数。

显而易见的解决方法是通过反射查找构造函数参数类型并传递一个空值/0/等数组。但如果构造函数抛出异常,这将不起作用。

是否有更好的选择(也许使用其他库)?

【问题讨论】:

    标签: java reflection proxy-classes javassist cglib


    【解决方案1】:

    您可以使用Objenesis,它被实现为几个JVM 特定类的包装器。因此,该库允许您在不调用任何构造函数的情况下创建类的实例。但是,使用 Objenesis 可能不安全,因为特定于 JVM 的类不是可移植的或标准化的。出于这个原因,像 Spring 或 Hibernate 这样的库需要一个无参数的构造函数。

    无耻插件:如果您通常在寻找仍在积极开发的 javassist / cglib 的替代品,请查看我的库 bytebuddy.net

    【讨论】:

    • 啊,所以我用 cglib/javassist/ByteBuddy 创建了一个代理类,然后用 Objenesis 创建它的实例?
    • 是的。这就是你要做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 2020-10-03
    • 2021-09-04
    • 2015-01-22
    • 2014-06-18
    相关资源
    最近更新 更多