导航:首页 > 文件管理 > leravel中间件配置文件

leravel中间件配置文件

发布时间:2023-03-03 19:32:48

java自定义classloader在加载jar包和classes的时候,classloader不能找到classpath下的配置文件

设我们有一个hello.jar文件,里面有一个Util类,我们希望在运行期调将这个jar包放入到我们运行环境并且调用里面的Util.getVersion方法。怎么实现?
在java中,我们的类都是通过ClassLoader来加载的,同时ClassLoader具有层级关系,当某个类找不到时,它会去他的父类加载器去寻找,如果依然找不到,就抛出ClassNotFoundException了。
为了动态加载hello.jar里面的Util类,我们需要将这个jar包放入到我们的类加载器中去,然后再获取里面的类。如下面的代码

//位于hello.jar
packagecom.flyingzl;

publicclassUtil{

publicstaticvoidgetVersion(){

System.out.println("javaversion:"+System.getProperty("java.version"));
}

}

importjava.io.File;
importjava.lang.reflect.Method;
importjava.net.URL;
importjava.net.URLClassLoader;

publicclassMain{
publicstaticvoidmain(String[]args){

URL[]urls=newURL[]{};
MyClassLoaderclassLoader=newMyClassLoader(urls,null);

try{
classLoader.addJar(newFile("c:/hello.jar").toURI().toURL());
Class<?>clazz=classLoader.loadClass("com.flyingzl.Util");
Methodmethod=clazz.getDeclaredMethod("getVersion");
method.invoke(null);
classLoader.close();
}catch(Exceptione){
e.printStackTrace();
}

}

{

publicMyClassLoader(URL[]urls){
super(urls);
}

publicMyClassLoader(URL[]urls,ClassLoaderparent){
super(urls,parent);
}

publicvoidaddJar(URLurl){
this.addURL(url);
}

}

}

注意:这里仅仅是为了展示如何动态加载jar包,代码写得很粗,生产代码需要有更完善的异常处理。我们只关心如何动态加载jar包即可。
动态加载jar包,需要用到java.net.URLClassLoader这个类,它可以指定一个路径将jar包或者classes文件加载到类空间。加载完毕后,直接调用loadClass就可以加载指定的类,然后通过反射生成实例或者调用方法即可。
其实,Tomcat等服务器也利用了此思路,比如每一个web应用启动时,它都会自动加载其下的lib文件夹下的jar包。
运行程序,我们就可以看到程序正常输出:
javaversion:1.7.0_03

阅读全文

与leravel中间件配置文件相关的资料

热点内容
word如何整体缩小 浏览:528
中兴光纤猫f460端口映射教程 浏览:41
怎么弄迷你世界编程 浏览:702
qq发手机里的文件找不到 浏览:832
百度云文件有密码忘记了怎么办 浏览:469
扫描文件扫到哪里了 浏览:85
为什么淘宝app是黑色的 浏览:17
如何在cad中把图形输出为pdf文件 浏览:535
文件夹横签 浏览:988
extjs5mvc 浏览:614
win7如何安装数据库 浏览:647
informix数据库倒数卸数 浏览:983
华硕p7h55mplus升级 浏览:240
servlet调用jsp 浏览:481
文件的命名原则有哪些 浏览:352
苹果的文件管理是哪个 浏览:387
智能黑板如何给pdf文件做批注 浏览:788
哈弗智联app如何绑定二手车 浏览:728
cad文件不多可是异常增大 浏览:872
苹果手机怎样将音频文件导入剪映 浏览:432

友情链接