项目中有一个类 cn.qy.fk.util.PluginStarter
, 当 org.hyperic.sigar.Sigar
的对象被 new 出来时, PluginStarter 整个类的方法都会被重载, 完整的代码我都贴在下面, 想问下大佬们我如果要修改方法内容, 应该如何操作呢?
想要修改方法的类 cn.qy.fk.util.PluginStarter
(从 jar 包中反编译得来):
package cn.qy.fk.util;
@CustomFunction(
type = 7
)
public class PluginStarter {
public PluginStarter() {
}
public boolean start() {
return (boolean)null;
}
public void end() {
}
}
项目运行时 cn.qy.fk.util.PluginStarter
实际的源码为:
package cn.qy.fk.util;
import cn.qy.fk.util.CustomFunction;
import cn.qy.fk.util.SystemProperties;
@CustomFunction(type=7)
public class PluginStarter {
public boolean start() {
String error;
if ((error = SystemProperties.get((String)"error")) != null) {
System.out.println(error);
return false;
}
System.out.println("Plugin Context is starting ...");
return true;
}
public void end() {
System.out.println("Plugin Context was started!");
}
}
注解 cn.qy.fk.util.CustomFunction
(从 jar 包中反编译得来):
package cn.qy.fk.util;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomFunction {
int type();
}
项目中用到了:
我通过 IDEA 的断点发现每当代码执行到了下面的 new Sigar();
时类就被重载了.
try {
Sigar sigar = new Sigar();
(new PluginStarter()).start();
}
项目的资源目录还发现了:
libsigar-amd64-freebsd-6.so
libsigar-amd64-linux.so
libsigar-amd64-solaris.so
libsigar-ia64-hpux-11.sl
libsigar-ia64-linux.so
libsigar-pa-hpux-11.sl
libsigar-ppc64-aix-5.so
libsigar-ppc64-linux.so
libsigar-ppc-aix-5.so
libsigar-ppc-linux.so
libsigar-s390x-linux.so
libsigar-sparc64-solaris.so
libsigar-sparc-solaris.so
libsigar-universal64-macosx.dylib
libsigar-universal-macosx.dylib
libsigar-x86-freebsd-5.so
libsigar-x86-freebsd-6.so
libsigar-x86-linux.so
libsigar-x86-solaris.so
sigar-amd64-winnt.dll
sigar-x86-winnt.dll
sigar-x86-winnt.lib
想问下这种是不是被 jni 给重载了呢?如果要改的话怎么入手?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.