【发布时间】:2011-01-23 20:57:17
【问题描述】:
我正在编写一个自定义类加载器,我已通过使用参数将其设置为默认类加载器
-Djava.system.class.loader=MyClassLoader
大部分类都是由我的类加载器加载的,但有些类没有,为什么? 这些类在一个外部 jar 文件中。
更新 这里是一个例子
public class Main{
public static void main(String[] args) {
try{
// A simple class loader, ovveride loadClass
// method and print in stdout the name of the class loaded.
MyClassLoader classLoader=new MyClassLoader(MyClassLoader.class.getClassLoader());
Class init=classLoader.loadClass("Initializer");
Object instance=init.newInstance();
init.getMethod("init").invoke(instance);
}
catch(Exception ex){
ex.printStackTrace();
}
}
}
public class A{
public A() {
System.out.println("Im A");
}
}
public class Initializer {
public void init() {
A a=new A();
}
}
问题是:我希望类 A 被我的类加载器加载,但这并没有发生,为什么?
更新
无论如何,我想用我的类加载器加载我的所有类,因为我想加密类代码并在运行时解密它。 那么,如何将我的类加载器用作我所有类的默认类加载器?
谢谢。
【问题讨论】:
-
你的 CL 没有加载哪些类?
-
我的水晶球闪闪发光,好像在这种特殊情况下发生了 ClassNotFoundException,而我的 java woodoo 娃娃拒绝在没有堆栈跟踪的情况下继续 :)
-
我想你的水晶球坏了,我也不例外,一切正常,但我注意到有些类没有被我的类加载器加载。 (加载类时我在标准输出中打印)
-
旁注:如果您要在运行时解密,那么所有需要解密的信息都可用于主机/客户端计算机。这不会使您的应用程序安全。只是比平常更难闯入。这值得么?还是客户要求?
-
是的在客户端机器中,它作为许可证密钥工作。通过自定义解密算法并将密钥隐藏在机器中,我达到了相当高的安全级别。我只需要混淆和保护一个类,即类加载器。这无疑更容易和更强大地混淆我项目的所有类。
标签: java classloader