java加载自己写的类_java 自定义类加载器从磁盘或网络加载类
一、编写自定义类加载器类
package com.mybatis.entity;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* 自定义类加载器
* @author dgw
*
*/
public class MyClassLoader extends ClassLoader{
public Class> getClass(String name) throws ClassNotFoundException {
byte[] data=null;
try {
data = this.loadNetClassFile(name);
} catch (Exception e) {
e.printStackTrace();
}
return super.defineClass(name, data, 0, data.length);
}
/**
* 从磁盘加载
* @param name
* @return
* @throws Exception
*/
public byte[] loadClassFile(String name) throws Exception{
String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
String filePath = "D:"+File.separator+fileName;
File file=new File(filePath);
InputStream input=new FileInputStream(file);
ByteArrayOutputStream baos = inputStreamToBytes(input);
return baos.toByteArray();
}
/**
* 从网络加载
* @param name
* @return
* @throws Exception
*/
public byte[] loadNetClassFile(String name) throws Exception{
String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
URL url=new URL("http://localhost:8080/"+fileName);
URLConnection openConnection = url.openConnection();
InputStream input=openConnection.getInputStream();
ByteArrayOutputStream baos = inputStreamToBytes(input);
return baos.toByteArray();
}
private ByteArrayOutputStream inputStreamToBytes(InputStream input) throws IOException {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//必须定义byte数组才能使用InputStream
byte[] data=new byte[1024];
int len=0;//读取的个数
while((len=input.read(data))!=-1){
baos.write(data,0,len);
}
input.close();
baos.close();
return baos;
}
}
二、编写测试类
package com.mybatis.entity;
/**
* 自定义类加载器测试类
* @author dgw
*
*/
public class TestMyClassLoader {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
MyClassLoader load=new MyClassLoader();
Class> clazz = load.getClass("com.love.mapper.User");
Object newInstance = clazz.newInstance();
System.out.println(newInstance);
}
}
三、需要加载的类User类
package com.love.mapper;
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "自定义类加载器加载类,User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
四、把测试类放到本地磁盘D盘
五、把此时类User.class放到tomcat根目录root下面
六、测试效果图
java加载自己写的类_java 自定义类加载器从磁盘或网络加载类相关推荐
- java简单通讯录的实现02person类_Java自定义类加载器实现不同版本的类加载
一 什么是类隔离技术 只要你 Java 代码写的足够多,就一定会出现这种情况:系统新引入了一个中间件的 jar 包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodErr ...
- 查看类的实现类mac_自定义类加载器实现热加载
一.实现的需求 当一个java被修改后,系统无需重启,替换的类立即生效,这里以Work.java为例 二.实现的思路 1)难点分析 当项目在执行的时候,我们修改了Work.java,这个类的class ...
- java import自定义类_自定义类加载器-从.class和.jar中读取
一. 类加载器 JVM中的类加载器:在jvm中,存在两种类加载器, a) Boostrap ClassLoader:这个是由c++实现的,所以在方法区并没有Class对象的实例存在.用于加载JAVA_ ...
- java applet找不到类_java – Applet类加载器在applet的jar中找不到类
我开始问这个问题,然后在提交之前找出答案.我决定发布这个问题,以便遇到同样问题的其他人能够从我的错误中吸取教训. 我遇到了一个applet(实际上是JApplet)无法实例化另一个类的问题,该类与ap ...
- 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器
28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...
- Android进阶:十三、自定义类加载器加载加密类文件
之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等. 其实笔者对类加 ...
- java的类加载器以及如何自定义类加载器
ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 类加载器结构 结构:BootstrapClassLoader(祖父)–>ExtClassLoader ...
- Java的自定义类加载器及JVM自带的类加载器之间的交互关系
JVM自带的类加载器: 其关系如下: 其中,类加载器在加载类的时候是使用了所谓的"父委托"机制.其中,除了根类加载器以外,其他的类加载器都有且只有一个父类加载器. 关于父委托机制的 ...
- 面试干货4——你对Java类加载器(自定义类加载器)有了解吗?
类加载器 推荐:在准备面试的同学可以看看这个系列 一.类加载器的作用 二.Java虚拟机类加载器结构 1. 引导类(启动类)加载器 2. 扩展类加载器 3. 系统类加载器 三.类加载器的加载机制 1. ...
最新文章
- 第二课.进一步熟悉Linux
- java管程 实现,Java中的管程模型
- moment.js相关知识总结
- VC实现HTTP协议的GET和POST方法
- OC之protocol监听器的实现
- 云图说丨手把手教你为容器应用配置弹性伸缩策略
- Eclipse的代码补全方法可以实现psvm和sout
- 网卡变慢_解Bug之路记一次线上请求偶尔变慢的排查
- 看《Java就业培训教程》--孙孝祥著有读书笔记
- IBM Watson:好的AI能够在方方面面推动人类文明的发展
- Python官方中文开发文档
- 学习笔记-网络安全(二)
- 广义线性混合模型GLMM
- 做中学之五笔输入法实践教程
- java对字符串集合按字符串长度排序
- 圆弧周长公式_弧长计算公式
- linux内核裁剪的具体过程和选择
- HDFS 的权限管理不可怕,一篇文章搞懂它
- 前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事
- HashMap在JDK1.7版本头插法实现解析
热门文章
- 《统计学》学习笔记之时间序列分析和预测
- 机器学习-集成学习-提升树-LightGBM
- python去掉字符串开头的零_Python / Pandas-删除以字符串开头的列
- pythonuiautomator2教程_UIAutomator2 + Python 入门使用总结
- SASS 和 SCSS 的区别
- Open SAP 上 SAP Fiori Elements 公开课第一单元学习笔记
- SAP Cloud for Customer(C4C)里如何定义跨BO间的association
- SAP UI5 OData, annotation这些设计的意义
- Angular应用动态创建style标签页的场景
- Hybris Commerce Cloud backoffice的一些使用截图 - home工作中心