当前位置 : 主页 > 网络编程 > 其它编程 >

javaclassloader使用,热部署原理

来源:互联网 收集:自由互联 发布时间:2023-07-02
classloader就是java的加载器。如何正确使用自己打包一个自定义的jar包packagecom.py.classloader.test.clazz;public classloader就是java的加载器。如何正确使用 自己打包一个自定义的jar包 package com.py.
classloader就是java的加载器。如何正确使用自己打包一个自定义的jar包packagecom.py.classloader.test.clazz;public

classloader就是java的加载器。如何正确使用

自己打包一个自定义的jar包

package com.py.classloader.test.clazz;public class TestBean {String str;public TestBean(String str) {this.str = str;}@Overridepublic String toString() {return "test bean:" + str;}} package com.py.classloader.test.clazz;import com.py.classloader.test.Test1S;public class TestService {public static TestBean getTestBean(String str) {System.out.println(Test1S.test());TestBean t = new TestBean(str);return t;}} package com.py.classloader.test.clazz;/** * 测试主线程 * * @author cyd * @date 2018年5月16日 */public class Main implements Runnable {@Overridepublic void run() {new Thread(()->{System.out.println("main start");int i = 0;while (true) {System.out.println(TestService.getTestBean("test" + ++i));try {Thread.sleep(2000);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();}}

打包完成后把test.jar放到测试main函数所在工程目录下

package com.py.classloader.test;public class Test1S {public static String test() {return "Test1S.test()+564564";}} package com.py.classloader.test;import java.io.File;import java.net.URL;import java.net.URLClassLoader;/*** 类加载器ClassLoader测试** @author cyd* @date 2018年5月16日*/public class ClassLoaderTestMain {static File jarFile = new File("jar_classloader/test.jar");public static void main(String[] args) {try {testMainRun();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static ClassLoader getClassLoader() throws Exception {ClassLoader loader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, ClassLoaderTestMain.class.getClassLoader());return loader;}public static void testMainRun() throws Exception {try {Class mainLoaderClazz = ClassLoaderTestMain.class.getClassLoader().loadClass("com.py.classloader.test.clazz.Main");System.out.println(mainLoaderClazz);} catch (Exception e) {e.printStackTrace();}ClassLoader loader = getClassLoader();Class clazz = loader.loadClass("com.py.classloader.test.clazz.Main");Runnable main = (Runnable)clazz.newInstance();main.run();}}

就可以得到运行结果

可见这个test.jar中的类在主加载器中是加载不到的。

这样就把纯业务逻辑分离出来打成独立的jar包,然后通过通过ClassLoader配合文件监听系统 比如apache的commons-vfs来做java的热部署

上一篇:c#写带行号的richTextBox
下一篇:没有了
网友评论