繁体   English   中英

在运行时扩展类

[英]Extending class at runtime

因此,对于这个项目,我试图在运行时扩展一个类。 我想知道的是,这可能吗? 如果是这样,我该怎么办? 是否有用于这些目的的库?

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

您可以使用以下代码创建类扩展

 public Object createProxy(Class targetClass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(targetClass);
    enhancer.setCallback(NoOp.INSTANCE);
    return enhancer.create();
   }

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

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

答案取决于您对“扩展课程”的意思。 在Java中,“ extend”意味着声明另一个扩展第一个类的类(是子类)。 因此,如果要创建给定类的子类,则可以-只需准备一个表示该子类的字节数组,然后将其传递给类加载器即可。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM