1.问题背景
我们需要对接A公司的安全认证服务,他们的jar不能传至外网,我们的源代码也不能拿到他们公司进行开发,由此引出了这个问题。
2.解决方案A
A公司发了接口文档及示例代码,我们本地根据A公司提供的示例代码复制包名,做了一个模拟jar包,思路是让本地的代码可以成功打包,去A公司部署的时候再替换上真实的jar包。最终报NoSuchMethod方法找不到,根据该方法分析可能是jar冲突导致或打包问题。于是使用反射指定jar包去开发。
3.解决方案B
File file = new File("C:\\Users\\DELL\\Desktop\\xxx-1.0.0.jar");
URL url = file.toURI().toURL();
ClassLoader loader = new URLClassLoader(new URL[]{url});
Class<?> cls = loader.loadClass("com.xxx.xxx.Test");
结果: 使用指定反射jar的方式开发,放置服务器后指定的jar包可以找到,但指定jar包所依赖的其他jar无法找到。ClassNotFound
3.解决方案C
Class<?> cls = Class.forName("com.xxx.xxx.Test");
使用类加载方式成功解决。方案如下
反射问题原理