一、编写自定义类加载器类

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 自定义类加载器从磁盘或网络加载类相关推荐

  1. java简单通讯录的实现02person类_Java自定义类加载器实现不同版本的类加载

    一 什么是类隔离技术 只要你 Java 代码写的足够多,就一定会出现这种情况:系统新引入了一个中间件的 jar 包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodErr ...

  2. 查看类的实现类mac_自定义类加载器实现热加载

    一.实现的需求 当一个java被修改后,系统无需重启,替换的类立即生效,这里以Work.java为例 二.实现的思路 1)难点分析 当项目在执行的时候,我们修改了Work.java,这个类的class ...

  3. java import自定义类_自定义类加载器-从.class和.jar中读取

    一. 类加载器 JVM中的类加载器:在jvm中,存在两种类加载器, a) Boostrap ClassLoader:这个是由c++实现的,所以在方法区并没有Class对象的实例存在.用于加载JAVA_ ...

  4. java applet找不到类_java – Applet类加载器在applet的jar中找不到类

    我开始问这个问题,然后在提交之前找出答案.我决定发布这个问题,以便遇到同样问题的其他人能够从我的错误中吸取教训. 我遇到了一个applet(实际上是JApplet)无法实例化另一个类的问题,该类与ap ...

  5. 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器

    28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...

  6. Android进阶:十三、自定义类加载器加载加密类文件

    之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等. 其实笔者对类加 ...

  7. java的类加载器以及如何自定义类加载器

    ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 类加载器结构 结构:BootstrapClassLoader(祖父)–>ExtClassLoader ...

  8. Java的自定义类加载器及JVM自带的类加载器之间的交互关系

    JVM自带的类加载器: 其关系如下: 其中,类加载器在加载类的时候是使用了所谓的"父委托"机制.其中,除了根类加载器以外,其他的类加载器都有且只有一个父类加载器. 关于父委托机制的 ...

  9. 面试干货4——你对Java类加载器(自定义类加载器)有了解吗?

    类加载器 推荐:在准备面试的同学可以看看这个系列 一.类加载器的作用 二.Java虚拟机类加载器结构 1. 引导类(启动类)加载器 2. 扩展类加载器 3. 系统类加载器 三.类加载器的加载机制 1. ...

最新文章

  1. 第二课.进一步熟悉Linux
  2. java管程 实现,Java中的管程模型
  3. moment.js相关知识总结
  4. VC实现HTTP协议的GET和POST方法
  5. OC之protocol监听器的实现
  6. 云图说丨手把手教你为容器应用配置弹性伸缩策略
  7. Eclipse的代码补全方法可以实现psvm和sout
  8. 网卡变慢_解Bug之路记一次线上请求偶尔变慢的排查
  9. 看《Java就业培训教程》--孙孝祥著有读书笔记
  10. IBM Watson:好的AI能够在方方面面推动人类文明的发展
  11. Python官方中文开发文档
  12. 学习笔记-网络安全(二)
  13. 广义线性混合模型GLMM
  14. 做中学之五笔输入法实践教程
  15. java对字符串集合按字符串长度排序
  16. 圆弧周长公式_弧长计算公式
  17. linux内核裁剪的具体过程和选择
  18. HDFS 的权限管理不可怕,一篇文章搞懂它
  19. 前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事
  20. HashMap在JDK1.7版本头插法实现解析

热门文章

  1. 《统计学》学习笔记之时间序列分析和预测
  2. 机器学习-集成学习-提升树-LightGBM
  3. python去掉字符串开头的零_Python / Pandas-删除以字符串开头的列
  4. pythonuiautomator2教程_UIAutomator2 + Python 入门使用总结
  5. SASS 和 SCSS 的区别
  6. Open SAP 上 SAP Fiori Elements 公开课第一单元学习笔记
  7. SAP Cloud for Customer(C4C)里如何定义跨BO间的association
  8. SAP UI5 OData, annotation这些设计的意义
  9. Angular应用动态创建style标签页的场景
  10. Hybris Commerce Cloud backoffice的一些使用截图 - home工作中心