自定义类加载器(ClassLoader + URLClassLoader)
【0】README
0.1)本文主要对类加载器进行分析,且 URLClassLoader是 ClassLoader的子类;
0.2)关于如何设置类加载器的加载路径,参见 对servlet容器的补充
【1】URLClassLoader类加载器
1.1)URLClassLoader的一种加载方式
package com.tomcat.classloader;import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;public class URLClassLoaderTest {public final static String dir = System.getProperty("user.dir") + File.separator + "src" + File.separator;public static void main(String[] args) throws Exception {// Getting the jar URL which contains target classURL[] classLoaderUrls = new URL[]{new URL("file:" + dir)};// Create a new URLClassLoader URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);// Load the target classClass<?> beanClass = urlClassLoader.loadClass("com.tomcat.test.Bean");// Create a new instance from the loaded classConstructor<?> constructor = beanClass.getConstructor();Object beanObj = constructor.newInstance();// Getting a method from the loaded class and invoke itMethod method = beanClass.getMethod("sayHello");method.invoke(beanObj);}
}
package com.tomcat.test;public class Bean {public void sayHello() {System.out.println("Hello from loaded Bean class for test!!!");}
}
1.2)URLClassLoader的另一种加载方式
package com.tomcat.classloader;import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;public class URLClassLoaderTest {public final static String dir = System.getProperty("user.dir") + File.separator + "webroot" + File.separator;public static void main(String[] args) { try {File file = new File(dir);URL url = file.toURI().toURL(); // attend this lineURL[] urls = new URL[]{url};URLClassLoader loader = new URLClassLoader(urls, null, null); System.out.println("test = " + loader.getURLs()[0].toString());Class<?> beanClass = loader.loadClass("servlet.Bean");Object obj = beanClass.newInstance();Method method = beanClass.getMethod("sayHello");method.invoke(obj);} catch (Exception e) {e.printStackTrace();} }
}
【2】ClassLoader类加载器的加载方式
package com.tomcat.test;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;public class ClassLoaderTest { // 第一种加载类的方式public static void main1(String[] args) throws Exception { Class<?> newClass = Class.forName("com.tomcat.classloader.Bean");Constructor constructor = newClass.getConstructor();Object obj = constructor.newInstance();Method method = newClass.getMethod("sayHello");method.invoke(obj);}// 第二种加载类的方式public static void main(String[] args) throws Exception { ClassLoader loader = Thread.currentThread().getContextClassLoader();Class<?> newClass = loader.loadClass("com.tomcat.classloader.Bean");Constructor constructor = newClass.getConstructor();Object obj = constructor.newInstance();Method method = newClass.getMethod("sayHello");method.invoke(obj);}
}
自定义类加载器(ClassLoader + URLClassLoader)相关推荐
- 自定义类加载器加载冲突类(一)-ClassLoader
使用场景:项目中遇到使用不同版本的类时候因为同路径同名类的冲突可以使用自定义类加载器进行加载规避这一问题 相关代码如下: 代码 1. 类加载器: import java.io.File; import ...
- 【ClassLoader】实现自定义类加载器加载指定路径下的Class文件和Jar包
文章目录 前言 自定义类加载器加载.class文件 自定义类加载器加载jar包文件 前言 在web开发中,一般我们是不需要去自己实现类加载器的,常见的web容器已经帮我们实现了指定路径下的加载,比如我 ...
- java类加载器_类加载器ClassLoader
上篇文章说到,Class类可以通过一个类的全限定名去加载类,那么底层是如何去加载的呢?这就是我们今天要聊的类加载器ClassLoader,其可以通过一个类的全限定名来获取描述此类的二进制字节流,也即是 ...
- 第五章 类加载器ClassLoader源码解析
说明:了解ClassLoader前,先了解 第四章 类加载机制 1.ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 2.类加载器结构 结构:Bootstr ...
- 自定义类加载器_jvm超详细探索自定义类加载器(值得收藏)
原创:鲁班学院子牙老师 微信公众号搜索启明南 如果你想看懂本篇文章,需要你对类加载器有一定的了解.如JVM自带的类加载器.双亲委派.自定义类加载器.类加载每个阶段做了什么--如果你对这些知识还有夹生的 ...
- java.lang包—类加载器ClassLoader类
注意: 类加载器的知识与JVM内存模型紧密相连,要学好这块的知识,一定要掌握JVM的内存模型. 关于JVM内存模型,推荐阅读:JVM-内存模型JMM 目录 一.什么是ClassLoader? 二.类加 ...
- JVM自定义类加载器在代码扩展性的实践
一.背景 名单管理系统是手机上各个模块将需要管控的应用配置到文件中,然后下发到手机上进行应用管控的系统,比如各个应用的耗电量管控:各个模块的管控应用文件考虑到安全问题,有自己的不同的加密方式,按照以往 ...
- java的类加载器以及如何自定义类加载器
ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 类加载器结构 结构:BootstrapClassLoader(祖父)–>ExtClassLoader ...
- JVM类加载机制、双亲委派机制、自定义类加载器、打破双亲委派机制
1.类加载器 站在Java虚拟机的角度看,只有两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现(HotSpot虚拟机.JDK8中), ...
- 自定义类加载器以及打破双亲委派
0x01 自定义类加载器 自定义类加载器加载一个类需要:继承ClassLoader,重写findClass,如果不想打破双亲委派模型,那么只需要重写findClass:如果想打破双亲委派模型,那么就重 ...
最新文章
- 类模版静态成员初始化
- C++/CLI Winform中调用DLL的三种方法
- pom项目install报错没有自己_SAP财务凭证报错:没有项目种类分配到科目
- 写代码之前应该做的几件事
- bellman ford java_Java C 实现Bellman-ford算法
- chartjs和echartsjs库简介
- 微软建了个内部AI大学:“我们很缺人!是时候增强自我造血能力了”
- Go1.18泛型使用详解(附最新gocode)
- 如何安装安信可一体化开发环境【转】
- Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
- 威纶触摸屏485轮询通讯_威纶通触摸屏与PLC实现一机多屏通讯方法
- netapp存储 api接口
- 软件开发技术文档的编写模块
- 中企海外周报 | 华为在德国发布mate30系列手机;一汽新车亮相法兰克福车展
- 三进制计算机基本原理,三进制(三进制计算机)
- c语言整型常量后加l或u,《软考程序员》整型常量
- nginx实现ip138查询当前ip功能,配置文件实现接口
- 嵌入式软件开发能力提高的几个途径
- Ice飞冰目录结构应用入口工程配置路由配置《四》
- TRecgNet:基于转换识别网络进行RGB-D场景识别
热门文章
- Educational Codeforces Round 81 (Rated for Div. 2) D. Same GCDs 欧拉函数\莫比乌斯
- Gym102832K. Ragdoll(CCPC长春)
- Doing Homework HDU - 1074
- 1592E - Скучающий Бакри
- nssl1453-Fibonacci数列【矩阵乘法,线段树】
- jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】
- P2014-选课【树形dp,背包】
- jzoj3461-小麦亩产一千八【斐波那契数列】
- Binary Search
- codeforces1469 E. A Bit Similar