在运行时扩展类

时间:2013-10-07 20:17:19

标签: java reflection runtime extend

因此,对于这个项目,我试图在运行时扩展一个类。 我想知道的是,这甚至可能吗?如果是这样,我该怎么做?那些东西有没有图书馆?

3 个答案:

答案 0 :(得分:4)

CGLib是您正在寻找的图书馆。它在扩展类或在运行时实现接口方面非常强大,因此许多流行的框架(如Spring或Hibernate)都使用它。

您可以使用

等代码创建类扩展
 public Object createProxy(Class targetClass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(targetClass);
    enhancer.setCallback(NoOp.INSTANCE);
    return enhancer.create();
   }

虽然您可能会使用具有所需逻辑的有用方法拦截器替换NoOp回调。

答案 1 :(得分:1)

是的,可以在运行时扩展一个类。尝试一个能够在运行时修改字节码的库,例如javassistASM

答案 2 :(得分:0)

答案取决于你对“扩展课程”的意思。在java中,“extend”表示声明另一个扩展第一个类的类(是子类)。因此,如果您想创建给定类的子类,这是可能的 - 只需准备一个表示子类的字节数组并将其传递给类加载器。

如果要向现有类添加字段或方法,则只有在加载此类时才可以这样做,并且可以通过替换字节数组表示来完成。如果已经加载了类,则无法以任何方式对其进行修改。