This example shows how a service implementation can be loaded with a URLClassLoader.
The files.
HelloService.java:
public interface HelloService {
public void sayHello();
}
HelloServiceImpl.java:
public class HelloServiceImpl implements HelloService {
@Override
public void sayHello() {
System.out.println("Hello!");
}
}
ServiceFactory.java uses URLClassLoader to load the service implementation:
import java.io.*;
import java.net.*;
public class ServiceFactory {
private static URL[] classLoaderUrls;
public static void setURLs(URL[] urls) {
classLoaderUrls = urls;
}
public static HelloService getHelloService() throws Exception {
URLClassLoader loader = new URLClassLoader(classLoaderUrls);
return (HelloService) Class.forName("HelloServiceImpl", true, loader).newInstance();
}
}
Test.java:
import java.io.*;
import java.net.*;
public class Test {
public static void main(String[] args) throws Exception {
ServiceFactory.setURLs(new URL[] {
new URL("file:service.jar")
});
HelloService h = ServiceFactory.getHelloService();
System.out.println("Class Loader: " + h.getClass().getClassLoader());
h.sayHello();
}
}
Create a runnable client jar:
C:\>jar -cfe client.jar Test Test.class ServiceFactory.class HelloService.class
Create a service jar:
jar -cf service.jar HelloServiceImpl.class
Test:
C:\>java -jar client.jar
Class Loader: java.net.URLClassLoader@addbf1
Hello!
分享到:
相关推荐
该类加载器用于从指向 JAR 文件和目录的 URL 的搜索路径加载类和资源。如果不是以该字符结束,则认为该 URL 指向一个将根据需要打开的 JAR 文件pac
执行链实际为:URLClassLoader.class.getConstructor(java.net.URL[].class).newInstance(new
使用URLClassLoader加载本地文件夹c盘下的test.jar文件
NULL 博文链接:https://yklovejava-163-com.iteye.com/blog/1736631
Springboot + Hutool-db 使用 URLClassLoader 动态加载外部数据库和数据池 jar包实例
NULL 博文链接:https://shihuan830619.iteye.com/blog/2160884
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang....
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(NativeMethod) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at sun.misc....
at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController....
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang....
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.load...
at java.net.URLClassLoader.findClass(URLClassLoader.java:434) at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:204) at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:688...
3. 自定义URLClassLoader。检查实现类.class文件的修改时间,如果是更新的.class文件则重新加载该实现类的class。 4. 调用方法前,先获取最新的代理类,然后调用代理类的方法。 这样,每次调用代理类中的方法,都会...
创建 URLClassLoader 类加载器 * 2.获取当前执行的classpath的所有jar包的路径 * 3.通过java的ToolProvider创建JavaCompile,用来执行class源文件 * 4.创建DiagnosticCollector用来执行获取执行失败的错误结果 *...
at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.load...
2):网络加载:java.net.URLClassLoader可以加载url指定的类 3):从jar、zip等等压缩文件加载类,自动解析jar文件找到class文件去加载util类 4):从java源代码文件动态编译成为class文件 当一个类被加载、连接、...
华为编程规范和范例,提供一个规范代码的参考,提到代码的可阅读性.
规则 5.6 避免完全依赖URLClassLoader和java.util.jar提供的默认自动签名认证机制 规则 6.1 禁止给仅执行非特权操作的代码签名 规范 6.2 不要使用危险的许可与目标组合 规则 6.3 不要禁用字节码验证 规则 6.4 ...
目录 第1章 lambda表达式 0 1.1 为什么要使用lambda表达式 2 1.2 lambda表达式的语法 4 1.3 函数式接口 6 1.4 方法引用 8 1.5 构造器引用 10 ...9.5.5 URLClassLoader 206 9.5.6 BitSet 206 练习 207 索引 209