Java反射调用jar包

news2024/11/19 4:22:40

反射作为托管语言的特性,很多框架都依赖反射来实现容器和面向接口编程,对架构程序很重要,首先试验Java的反射部分。

首先创建一个ZLZJar的工程,让他打包成jar包,代码如下

public class Test {
    //加两个整数
    public int Add(int a,int b) {
        return a+b;
    }

    //说你好
    public void Hello() {
        System.out.println("Hello My Name Is Lite Gray Fish");
    }
}

输出jar包的工程设置
在这里插入图片描述

生成jar包
在这里插入图片描述

然后创建一个ZLZTestJar工程测试jar包反射调用,代码如下

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.lang.Class;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarFile;
import java.util.jar.JarEntry;

//zlz练习
public class Main {

    //m主方法
    public static void main(String[] args) {
        try {
            //自己生成jar包路径
            URL url = new File("D:\\ZLZJar\\out\\artifacts\\ZLZJar\\ZLZJar.jar").toURI().toURL();
            URL[] urls = new URL[]{ url };
            //加载程序集
            URLClassLoader loader = new URLClassLoader(urls);
            //加载类
            Class c = loader.loadClass("Test");
            //创建对象
            Object o = c.newInstance();
            //得到方法
            Method m = c.getMethod("Hello");
            //执行
            m.invoke(o);
            //有参数的方法通过名称无法得到,自己包装一下
            //Method mAdd = c.getMethod("Add");
            Method mAdd = GetMethod(c,"Add");
            Object ret=mAdd.invoke(o,1,2);
            System.out.println("求和结果:"+ret);

        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

    //通过类型和名称得到方法
    public static Method  GetMethod(Class c,String name) {
        Method[] methods = c.getMethods();

        for (Method method : methods) {
            System.out.println("类名:"+method.getName().intern());
            if (method.getName().intern()==name) {

                return method;

            }
        }
        return  null;
    }

}

运行如下
在这里插入图片描述

基于反射和接口加上调用编译命令实现动态调用和业务脚本化,积累框架技术点一个,合适自己的就是最好的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1095298.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WAF绕过-漏洞发现之代理池指纹探针 47

工具 工具分为综合性的,有awvs,xray,单点的比如wpscan专门扫描wordpress的。而我们使用工具就可能会触发waf, 触发点 第一个就是扫描速度,太快了,可以通过演示,开代理池,白名单绕…

美国市场三星手机超苹果 中国第一属华为

报告显示,截至5月份的三个月,iOS系统在美国、澳大利亚以及日本表现不俗。Android系统份额则在英国、德国以及法国实现增长。在中国城市地区,iOS份额同比基本持平,而Android份额则达到80.5%,同比增长1个百分点。 三星在…

2023-2024-1 for循环-1(1-14)

7-1 求N分之一序列前N项和 本题要求编写程序,计算序列 1 1/2 1/3 ... 的前N项之和。 输入格式: 输入在一行中给出一个正整数N。 输出格式: 在一行中按照“sum S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。…

主流接口测试框架对比

公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。 需求 1、接口编写…

如何设计一个自动化测试平台

平台解决了什么问题 一般在企业内,技术团队如果规模比较小,很少会专门投入资源去做平台化的事情,特别是测试团队,无论是成本预算还是技术能力,先天技术能力不足,后天可投入的资源缺乏。 而平台的特点在于…

杭州亚运会用到哪些黑科技?

Spring实战系列文章: Spring实战 | Spring AOP核心秘笈之葵花宝典 Spring实战 | Spring IOC不能说的秘密? 国庆中秋特辑系列文章: 国庆中秋特辑(八)Spring Boot项目如何使用JPA 国庆中秋特辑(七&#…

Studio one 6.5中文直装版最新版,一键安装丨无套路分享丨宿主软件丨机架直播

Studio One 6.5 具有最先进的沉浸式混音和集成的空间音频制作工作流程。还有新的插件,改进的乐谱功能和对 DAWproject 的支持。 PreSonus 的“.5”更新通常都有比较大的变化,这次也不例外。Studio One 6.5 增加了一种全新的工作方式,完全集成…

博弈论——博弈信息结构

博弈信息结构 0 引言 在一个博弈构成中,博弈信息结构是不可或缺要素。博弈信息,顾名思义,就是在博弈中,博弈方对于信息的了解。知己知彼,百战不殆。和短兵相接的战争一样,只有充分了解自己的优劣势&#x…

python---求面积练习:提示用户输入圆的半径,根据公式S = πr2求圆的面积

求面积练习:提示用户输入圆的半径,根据公式S πr2求圆的面积 r float(input(‘请输入要计算圆的半径:’)) PI 3.14 s PI * r ** 2 print(f’圆的面积为:{s}) r float(input(‘请输入要计算圆的半径:’)) ------…

NetSuite ERP系统健康检查

这个题目来自最近的一个项目感受,“上线即停滞”。这是在中小型企业十分普遍的一个情况,一旦上线后,基本上信息化的建设就停止了。这是一个中小企业信息化的一个特点,因为其IT力量比较弱,所以在信息化的推动中缺乏话语…

蓝桥杯(等差素数列,C++)

思路: 1、因为找的是长度为10,且公差最小的等差素数列,直接用枚举即可。 2、枚举用三重循环,第一重枚举首项,第二重枚举公差,第三重因为首项算一个,所以枚举九个等差素数。 代码:…

异步使用langchain

文章目录 一.先利用langchain官方文档的AI功能问问二.langchain async api三.串行,异步速度比较 一.先利用langchain官方文档的AI功能问问 然后看他给的 Verified Sources 这个页面里面虽然有些函数是异步函数,但是并非专门讲解异步的 二.langchain asy…

08Maven中的继承和聚合的作用

Maven中的继承 实际开发中对一个比较大型的项目进行了模块拆分 , 一个project下面创建了很多个modul, 每一个module都需要配置自己的依赖信息 开发中使用的同一个框架内的不同jar包,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一 传统方…

qt-C++基于QWidget的程序模板

qt-C基于QWidget的程序模板 code review! 文章目录 qt-C基于QWidget的程序模板1.文件结构1.widget.h2.widget.cpp3.main.cpp4.mytest.pro5.widget.ui 1.文件结构 1.widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { cl…

03.生成式学习的策略与工具

目录 生成式学习的两种策略生成的物件介绍文句影像语音 策略一&#xff1a;各个击破&#xff08;Autoregressive (AR) model策略二&#xff1a;一次到位&#xff08;Non-autoregressive (NAR) model&#xff09;二者的比较其他策略二合一多次到位 AIGC工具New BingWebGPTWebGPT…

python项目之AI动物识别工具的设计与实现(django)

项目介绍&#xff1a; &#x1f495;&#x1f495;作者&#xff1a;落落 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;擅长Java、小程序、Python等。 &#x1f495;&#x1f495;各类成品java毕设 。javaweb&#xff0c;ssm&#xff0c;spring…

只要掌握Win32应用程序错误的来龙去脉,就没必要惊慌失措

也许你遇到了一个问题&#xff0c;你试图运行的程序已损坏甚至丢失。在这种情况下&#xff0c;Windows将无法正确运行该文件&#xff0c;因此&#xff0c;操作系统将生成一个错误——文件不是有效的32位应用程序或文件不是无效的Win32应用程序。 错误通常是因为可执行文件不是有…

【大作文】【图表】【第一段】

描述主题&#xff1a; how sb do the factors that sb do the intention of

万字解析——区块链hyperledger fabric2.2部署实战教程

导航 一、前言二、hyperledger fabric介绍三、测试网络示例3.1 搭建开发环境3.2 安装示例、二进制和 Docker 镜像3.3 使用Fabric测试网络3.4 使用认证机构建立网络 四、汽车生产应用4.1 搭建开发环境4.2 注册登记等操作使用4.3 智能合约4.4 更新账本 五、商业票据应用5.1 运行网…