千家信息网

Java中怎么用反射机制调用jar

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"Java中怎么用反射机制调用jar",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java中怎么用反射机制调用jar"吧!下面讲展示
千家信息网最后更新 2025年01月19日Java中怎么用反射机制调用jar

这篇文章主要讲解了"Java中怎么用反射机制调用jar",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java中怎么用反射机制调用jar"吧!

下面讲展示的是从image.jar包中调用image.Buddy类的方法。

public class Main {     public static void main(String[] args) {         try { //          两种方式都可以            URL url = new File("/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar").toURI().toURL();//          URL url = new URL("file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar");             URL[] urls = new URL[]{ url };             URLClassLoader loader = new URLClassLoader(urls);             Class c = loader.loadClass("image.Buddy");             Object o = c.newInstance();             Method m = c.getMethod("sleep");             m.invoke(o);         } catch (NoSuchMethodException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (InstantiationException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (InvocationTargetException e) {            e.printStackTrace();        } catch (MalformedURLException e) {            e.printStackTrace();        }    }}

有几点需要注意

第一:

URL 是 "file:/Users/wuchen/Documents/IntelliJIDEA/Applet/out/production/Applet/image.jar"

image.jar后面没有斜杠了

第二:

类名是 image.Buddy,不要因为URL里面有image就把image.Buddy中的image省略掉。

第三:

Buddy.class应该放在image文件夹内,然后打包image文件夹,而不是打包image文件夹里的所有文件,再把包名改成image.jar

补充:java动态载入指定的类或者jar包反射调用其方法

序言

有时候。项目中会用到java动态载入指定的类或者jar包反射调用其方法来达到模块的分离,使各个功能之间耦合性大大减少,更加的模块化。代码利用率更高。模式中的代理模式就用到java的这一机制。

下边就让我们通过代码来看看怎样实现此功能。

代码具体

package loadjarclass;import java.io.File;import java.lang.reflect.Method;import java.net.URL;import java.net.URLClassLoader;import org.junit.Test;public class LoadJarClassTest {  @Test public void testLoadClass() throws Exception{  /*动态载入指定类*/  File file=new File("D:/test");//类路径(包文件上一层)  URL url=file.toURI().toURL();  ClassLoader loader=new URLClassLoader(new URL[]{url});//创建类载入器  //import com.sun.org.apache.bcel.internal.util.ClassLoader;  //ClassLoader classLoader = new ClassLoader(new String[]{""});//类路径  Class cls=loader.loadClass("loadjarclass.TestTest");//载入指定类。注意一定要带上类的包名  Object obj=cls.newInstance();//初始化一个实例  Method method=cls.getMethod("printString",String.class,String.class);//方法名和相应的參数类型  Object o=method.invoke(obj,"chen","leixing");//调用得到的上边的方法method  System.out.println(String.valueOf(o));//输出"chenleixing"    /*动态载入指定jar包调用当中某个类的方法*/  file=new File("D:/test/commons-lang3.jar");//jar包的路径  url=file.toURI().toURL();  loader=new URLClassLoader(new URL[]{url});//创建类载入器  cls=loader.loadClass("org.apache.commons.lang3.StringUtils");//载入指定类,注意一定要带上类的包名  method=cls.getMethod("center",String.class,int.class,String.class);//方法名和相应的各个參数的类型  o=method.invoke(null,"chen",Integer.valueOf(10),"0");//调用得到的上边的方法method(静态方法,第一个參数能够为null)  System.out.println(String.valueOf(o));//输出"000chen000","chen"字符串两边各加3个"0"字符串 }}

感谢各位的阅读,以上就是"Java中怎么用反射机制调用jar"的内容了,经过本文的学习后,相信大家对Java中怎么用反射机制调用jar这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0