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"字符串
} }
假设对StringsUtils工具类感兴趣的朋友,能够參考我的博文:StringUtils方法全集介绍,commons-lang中经常用法
反射和代理技术知识,可參考我的的博文:Java的静态代理、动态代理。CGLib的动态代理。使用动态代理基于AOP的AspectJ框架—比較与具体解释,Java反射机制深入研究
java动态载入指定的类或者jar包反射调用其方法-涉及其它jar中的类就报ClassNotFound问题分析及解决思路
java动态载入指定的类或者jar包反射调用其方法的更多相关文章
- Java_java动态编译整个项目,解决jar包找不到问题
java动态编译整个项目,解决jar包找不到问题原文:http://itzyx.com/index.php/javac/ 动态将java文件编译为class文件解决方案:将temp\sdl\src目录 ...
- Linux查找class类所在jar包
1.说明 写代码或者定位问题的时候, 经常发生只知道类名不知道其所在jar包的问题, 在Eclipse中可以使用Ctrl+Shift+T查找类, 但是如果类所在的jar包不在Build Path中, ...
- ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结
项目中,载入指定的类反射调用方法一直报类找不到,经过数百次的測试.对这样的问题有了一个又一次的认识,特总结.记录.分享例如以下: 1.路径中尽可能用"/"或者File.separa ...
- Eclipse中将java类打成jar包形式运行
记录一次帮助小伙伴将java类打成jar包运行 1.创建java project项目 file > new > project > java project 随便起一个项目名称,fi ...
- java项目中可能会使用到的jar包解释
一.Struts2 用的版本是struts2.3.1.1 一个简单的Struts项目所需的jar包有如下8个 1. struts2-core-2.3.1.1.jar: Struts2的核心类库. 2. ...
- JAVA、android中常用的一些jar包的作用
正文: 这里主要介绍的是hibernate使用到的.jar Hibernate一共包括了23个jar包,令人眼花缭乱.本文将详细讲解Hibernate每个jar包的作用,便于你在应用中根据自己的需要进 ...
- 【BUG】websphere找不到类或jar包冲突
来自:http://liuwei1578.blog.163.com/blog/static/49580364200991572642653/ Jar包冲突问题是在大型Java软件开发中经常遇到的问题, ...
- java 执行 jar 包中的 main 方法
java 执行 jar 包中的 main 方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar执行后总是运行指定的主方法,如果 jar 中有多 ...
- 判断一个类到底是从哪个jar包中调用的工具类
项目中使用的jar包较多时,会出现jar冲突的情况,有时候很难判断当前使用的这个类是从哪个jar包中调用的.因为一般我们只能看到jar包的名称,不清楚其中的类的目录结构. 这个类的作用就是说明当前调用 ...
随机推荐
- Android Studio查看类中所有方法和属性
ctrl+f3效果: alt+7效果: 注意区别:虽然所有方法都有,但是顺序自己一看效果便知.一个是根据类中的顺序,另一个是根据a-z的开头字母顺序. 百度查了一下快捷键是ctrl+f12.但是自己试 ...
- hdu5072
补集转化,求不符合条件的三元组数目 但是怎么统计呢,这里我没想到 [如果三个数a, b, c不符合条件,那么一定有一对是互质的,有一对是不互质的.不妨令a, b互质,b, c不互质.于是我们可以枚举b ...
- 关闭浏览器session就被干掉的假象的问题
当在前台取出session时,关闭浏览器后再次访问服务器,这时服务器返回了一个null,此时的返回的session并非之前的那个session而是一个新的session. -->先来看看sess ...
- 从1到整数n中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12共出现了5次. 不考虑时间效率的解法: int Numbe ...
- 实例教程:1小时学会Python(转)
1 序言 面向读者 本文适合有经验的程序员尽快进入Python2.x世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的Python程序. Pyt ...
- notepad++ quicktext插件安装与代码片段配置[quicktext v0.2.1]
1 下载quicktext插件0.2.1版本 http://sourceforge.net/projects/quicktext/ 2 解压 3 把QuickText.ANSI.dll和QuickTe ...
- Hive知识
HIVEQL CREATE DATABASE financials(创建数据库) SHOW DATABASES(显示数据库) SHOW TABLES IN 数据库(列出数据库的所有表) SHOW DA ...
- [BZOJ 1145] 图腾totem
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1145 Solution: 算是一道神题了吧 设 f(abcd)为:当选出的四个数相对大小 ...
- [BZOJ 1305] 跳舞
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1305 Solution: 发现res是否可行具有单调性,二分答案 容易看出每次check ...
- [转]从此爱上iOS Autolayout
原文地址 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程.这篇文章两个月前就想写下来,但 ...