假设我有一个正在运行的Class'ABC'并且只有一个方法,比如run()。
使用反射,我想检查'ABC'是否有一个名为'walk()'的方法。由于'ABC'没有'walk()',搜索将返回负数。但是我可以动态添加插件或更新'ABC'以包含'walk()'方法(比如来自插件存储库)吗?我不想停止'ABC',而是让它适应即时服务请求......可能吗?
答案 0 :(得分:0)
是的,这是可能的。您正在寻找的是“字节码检测”。您可以在classload-time上执行此操作,并将修改后的字节码传递给类加载器或将修改后的类保存到磁盘。它完成了例如javassist库。
有关如何修改方法的示例,请查看http://blog.javabenchmark.org/2013/05/java-instrumentation-tutorial.html,但也可以添加新方法。