Class t = loader.loadClass(name);
Object o = t.newInstance();
o.getClass().getMethod("noReturnStrCall", null).invoke(o, null);
已经可以调用出结果,就是可以通过main方法或者容器取出类里面的方法,感觉类已经正常执行了,但是再别的类里面去new 这个类的时候就会报notFondClass请问怎么解决,原因是什么,
------解决思路----------------------
只能按照你上面的那种办法调用。
因为你在一个类里面new另外一个类的话,调用的是当前的classloader。
------解决思路----------------------
如1楼所说,如果用自定义ClassLoader加载类,则都应该用这类方法来进行加载。且不同的ClassLoader所加载的相同Jar包的同一个类,JVM都不会认为是同样的对象。
那么对于已经开发好的项目有没有什么好的方法对jar包加密呢?
—— 程序要预先进行特殊设计,调用部分尽量封装个工具类。
——如果是Web应用,可以去替换中间件(如Tomcat)的ClassLoader来实现。
——如果是Console应用,需要重写启动类,用自定义ClassLoader去启动原启动类。
——如果是某个具体模块,则可以考虑将该模块的参数进行标准化,比如限制其全部使用String作为参数,然后调用时用ClassLoader去调用,也可以借助Spring。