一、建立Service接口(Service.java):
package service;
public interface Service {
public void start();
public void shutdown();
}
二、建立接口的实例化应用(AppDemo.java):
package application;
import service.Service;
public class AppDemo implements Service {
public void shutdown() {
System.out.println("关闭");
}
public void start() {
System.out.println("启动");
}
}
————————————————
版权声明:本文为CSDN博主「ms2578」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ms2578/article/details/1939307
三、将AppDemo.java导出为Jar包,并将其放置在工程的application目录下。
四、新建Jar包加载类(JarLoader.java):
package loader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class JarLoader extends URLClassLoader {
private static JarLoader loader = null;
private JarLoader(){
super(new URL[0], JarLoader.class.getClassLoader());
}
public static JarLoader getInstance(){
if(loader==null)
loader = new JarLoader();
return loader;
}
public void addURL(String url) throws MalformedURLException {
this.addURL(new URL(url));
}
}
五、测试一下:
package test;
import java.net.MalformedURLException;
import service.Service;
import loader.JarLoader;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
JarLoader loader = JarLoader.getInstance();
try {
loader.addURL("jar:file:///"+System.getProperty("user.dir")
+ "/application/app1.jar" + "!/");
Service serv = (Service)Class.forName("application.AppDemo", true, loader).newInstance();
serv.start();
serv.shutdown();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
java调用外部jar文件
https://blog.csdn.net/ms2578/article/details/1939307?utm_source=blogxgwz3
Java URLClassLoader动态加载外部java代码
https://blog.csdn.net/ty497122758/article/details/77170901
Java URLClassLoader 和 ClassLoader类加载器
https://www.cnblogs.com/rogge7/p/7766522.html
java中使用URLClassLoader访问外部jar包的java类
https://www.cnblogs.com/franson-2016/p/6145822.html
springboot应用启动原理(二) 扩展URLClassLoader实现嵌套jar加载
https://segmentfault.com/a/1190000013532009?utm_source=tag-newest
【java】自定义ClassLoader 加载外部类和jar文件
https://blog.csdn.net/u010900754/article/details/51455290
Java 读取jar包中的资源文件夹
https://blog.csdn.net/devotedwife/article/details/81837205
https://www.cnblogs.com/tuning/p/6943427.html
GETCLASS()和GETCLASSLOADER()区别 以及CLASSLOADER详解及用途(文件加载,类加载)