我想为类而不是接口创建代理。有些答案描述了为此目的使用cglib或Javassist(例如https://stackoverflow.com/a/4449998/),但我遇到了皱纹,因为我对代理感兴趣的类没有无参数构造函数,所以Enhancer.create()
抛出异常。看看Javassist ProxyFactory
javadoc,它也需要构造函数参数。
明显的解决方法是通过反射查找构造函数参数类型并传递nulls / 0 / etc数组。但如果构造函数抛出异常,这将无法工作。
是否有更好的选择(也许使用其他库)?
答案 0 :(得分:4)
您可以使用Objenesis作为几个JVM特定类的包装器实现。因此,此库允许您创建类的实例,而无需调用其任何构造函数。但是,使用Objenesis可能不安全,因为JVM特定的类不可移植或标准化。因此,像Spring或Hibernate这样的库需要一个无参构造函数。
无耻插件:如果您一般都在寻找仍在积极开发的javassist / cglib的替代方案,请查看我的库bytebuddy.net。