有时候,项目中会用到java动态加载指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大降低,更加的模块化,代码利用率更高。下边就让我们通过代码来看看如何实现此功能。
public static void addJar() {
try {
// 系统类库路径
File libPath = new File("libs/");
// 获取所有的.jar文件
File[] jarFiles = libPath.listFiles(new FilenameFilter() {
@Overridepublic boolean accept(File dir, String name) {
return name.endsWith(".jar")
}
});
if (jarFiles != null) {
// 从URLClassLoader类中获取类所在文件夹的方法// 对于jar文件,可以理解为一个存放class文件的文件夹
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
boolean accessible = method.isAccessible(); // 获取方法的访问权限try {
if (accessible == false) {
method.setAccessible(true); // 设置方法的访问权限
}
// 获取系统类加载器
URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
for (File file : jarFiles) {
URL url = file.toURI().toURL();
try {
method.invoke(classLoader, url);
} catch (Exception e) {
e.printStackTrace();
}
}
} finally {
method.setAccessible(accessible);
}
}
} catch (Exception e) {
log.error("添加libs中jar包到系统中", e);
}
}
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/262656.html