当前位置: 首页 > news >正文

c#网站开发案例大全hao123文件在哪里

c#网站开发案例大全,hao123文件在哪里,网站 js 广告代码大全,wordpress资源网源码目录 问题 类加载器 获取外部 jar 包中的类以及方法 调用外部 jar 包中的方法 问题 工作中遇到一个需求,客户端将第三方的 jar 包上传到服务器中,系统需要解析出上传的 jar 中所有类以及类下的方法(方法名,方法输入参数类型&…

目录

问题

类加载器

获取外部 jar 包中的类以及方法

调用外部 jar 包中的方法


问题

工作中遇到一个需求,客户端将第三方的 jar 包上传到服务器中,系统需要解析出上传的 jar 中所有类以及类下的方法(方法名,方法输入参数类型,方法返回值类型),并将这些类以及方法提供给配置人员选择,由配置人员自由配置需要用到的方法。

类加载器

Java 虚拟机在加载类文件时,默认情况下使用自带的三个类加载器

  1. BootstrapClassLoader:加载 %JRE_HOME%\jre\lib 下的 jar 和 class
  2. ExtentionClassLoader:加载 %JRE_HOME%\jre\lib\ext 下的 jar 和 class
  3. AppClassLoader:加载当前应用路径下的 class

在 JDK 1.8 的 rt.jar 中,Launcher 类里定义了这三个类加载器

可以从源码中看到,三个加载器分别指定了不同的加载路径来加载类

BootstrapClassLoader

private static String bootClassPath = System.getProperty("sun.boot.class.path");

ExtentionClassLoader

System.getProperty("java.class.path")

AppClassLoader

System.getProperty("java.ext.dirs")

 三个加载器通过双亲委派机制来加载类文件,每个加载器都只负责加载自己负责的加载路径,显然,如果要自定义加载路径,从而实现加载外部 jar 包,就必须自定义加载器来实现。

在 JDK 1.8 中,可以看到 AppClassLoader 和 ExtClassLoader 都是继承 URLClassLoader 来实现的。若要加载外部的 jar 包,只需拿到外部 jar 包的 URL 路径,用 URLClassLoader 便可以加载。

获取外部 jar 包中的类以及方法

public class JarUtils {/*** 这些默认方法不打印*/private static List<String> DEFAULT_METHODS = Arrays.asList("wait", "equals", "notify", "notifyAll", "toString", "hashCode" , "getClass");public static void parseJar(File file) throws Exception {URL url = file.toURI().toURL();try (URLClassLoader myClassLoader = new URLClassLoader(new URL[]{url}, Thread.currentThread().getContextClassLoader())) {//通过jarFile和JarEntry得到所有的类JarFile jar = new JarFile(file);//返回zip文件条目的枚举Enumeration<JarEntry> enumFiles = jar.entries();JarEntry entry;//测试此枚举是否包含更多的元素while (enumFiles.hasMoreElements()) {entry = enumFiles.nextElement();if (entry.getName().indexOf("META-INF") < 0) {String classFullName = entry.getName();if (classFullName.endsWith(".class")) {//去掉后缀.classString className = classFullName.substring(0, classFullName.length() - 6).replace("/", "."); //类名Class<?> myclass = myClassLoader.loadClass(className);System.out.println(String.format("类名:%s", className));//得到类中包含的属性Method[] methods = myclass.getMethods();for (Method method : methods) {String methodName = method.getName();if (DEFAULT_METHODS.contains(methodName)) {continue;}//方法名System.out.print(String.format("方法名:%s; ", methodName));Class<?>[] parameterTypes = method.getParameterTypes(); //方法参数类型System.out.print(String.format("方法参数类型:%s; ", Arrays.stream(parameterTypes).map(Class::getSimpleName).collect(joining(","))));System.out.println(String.format("方法返回类型:%s; ", method.getReturnType().getSimpleName())); //方法返回值类型}System.out.println("***************************");}}}} catch (IOException e) {throw e;}}}

调用外部 jar 包中的方法

public class JarUtils {public static void executeMethod(File f, String className, String methodName, Class[] classes, Object[] objects) {//通过URLClassLoader加载外部jartry (URLClassLoader urlClassLoader = new URLClassLoader(new URL[]{f.toURI().toURL()})) {//获取外部jar里面的具体类对象Class<?> targetClass = urlClassLoader.loadClass(className);//创建对象实例Object instance = targetClass.newInstance();//获取实例当中的方法名为show,参数只有一个且类型为string的public方法Method method = targetClass.getMethod(methodName, classes);//传入实例以及方法参数信息执行这个方法Object returnObj = method.invoke(instance, objects);System.out.println(returnObj);} catch (Exception e) {e.printStackTrace();}}
}

http://www.15wanjia.com/news/172233.html

相关文章:

  • 做视频在哪个网站找素材深圳seo优化排名公司
  • 微信怎么建设网站企业为什么要增资
  • 建站之星建出来的网站如何上传农产品网络营销方案
  • 北京网站运营优化公司建设银行官网电话
  • 北京市保障房建设官方网站本地佛山企业网站建设
  • 江西通威公路建设集团有限公司网站护肤品网站模板
  • 网站上传小马后怎么做visual composer wordpress.org
  • 网站专题制作网络架构拓扑图
  • 建设一个网站要多少费用郑州seo优化顾问阿亮
  • 泗水做网站ys178四川建设银行手机银行下载官方网站下载
  • 网站商务通弹出窗口图片更换设置专业定制网红柴火灶
  • 物流网站公司网站开发 视频存储
  • 精品网站建设费用 找磐石网络一流网站扫二维码怎么做
  • 五莲网站制作惠东县住房和城乡规划建设局网站
  • 做网站最小的字体是多少像素文化建设的中心环节是什么
  • 昆明app网站开发公司广告设计是什么
  • 网站建设备案优化之看惠州市seo上词
  • 顺德网站建设如何网站备案编号查询
  • 计算机应用技术网站开发h5响应式网站建设
  • 哪些网站有设计缺点怎么样才能申请网址
  • 改图网网站谁做的安居客网官网入口
  • 长春网站建设致电吉网传媒优网页游戏网站源码
  • 如何运用网站模板wordpress评论分页不显示
  • 外贸营销网站北京展示型网站
  • 企业网站的常见服务是什么公司网站建设合规吗
  • 建设一个网站需要注意哪些内容百度 营销推广多少钱
  • ps 制作网站建设部法律法规网站
  • 苏州品牌网站设计企业长宁区网站制
  • 建设网站公司网站用dw做音乐网站模板
  • 淘宝做任务网站网站建设郑州