在运行时替换(覆盖)类实现(Java)

Car*_*elo 6 java runtime classloader

是否有任何替代(重写)Java类实现的方法,该类实现已由另一个实现(由字节数组提供)由System类加载器加载?

为了说明我的疑问,请遵循以下代码:

public class Main {
    public static void main(String ... args) {
        Foo foo = new Foo();
        foo.print();

        ClassLoader cl = ...

        Foo foo2 = (Foo) cl.newInstance();
        foo2.print();
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个Foo的print()方法打印"Implementation 1",第二个打印出"Implementation 2".foo的第二个实例由类加载器从一个字节数组中检索(可以存储在文件中,也可以从任何流中获取......)

PS:要求Foo是一个类,而不是一个接口,并且不能扩展,即,定义类实现的实际字节(在VM内部)被覆盖.

小智 0

CGLib 就是这样做的。它在 Spring 和 Hibernate 中用于此目的。