Java高级进阶:自定义ClassLoader

转载自 Java高级进阶:自定义ClassLoader

 

 

假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢?

读取自定义目录的类

示例读取c:/test/com/test.jdk/Key.class这个类。

package com.test.jdk;public class Key {private String key = "111111";
}

 

自定义ClassLoader

import org.apache.commons.io.IOUtils;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class LocalClassLoader extends ClassLoader {private String path = "c:/test/";@Overrideprotected Class<?> loadClass(String name) throws ClassNotFoundException {Class<?> cls = findLoadedClass(name);if (cls != null) {return cls;}if (!name.endsWith(".Key")) {return super.loadClass(name);}try {InputStream is = new FileInputStream(path + name.replace(".", "/") + ".class");byte[] bytes = IOUtils.toByteArray(is);return defineClass(name, bytes, 0, bytes.length);} catch (IOException e) {e.printStackTrace();}return super.loadClass(name);}
}

自定义类加载器正常加载到类,程序最后输出:111111

URLClassLoader

上面自定义一个类加载器来读取自定义的目录,其实可以直接使用URLClassLoader就能读取,它已经实现了路径下类的读取逻辑。

public static void main(String[] args) {try {URLClassLoader ucl = new URLClassLoader(new URL[]{new URL("c:/test/")});Class<?> cls = ucl.loadClass("com.test.jdk.Key");Field field = FieldUtils.getField(cls, "key", true);Object value = field.get(cls.newInstance());System.out.println(value);} catch (Exception e) {e.printStackTrace();}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql如何分析sql执行效率和进行效率优化

【0】如何分析mysql中sql执行较慢的问题 步骤1、观察&#xff0c;至少跑一天&#xff0c;看看生产的慢sql情况&#xff1b;步骤2、开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟就是慢sql&#xff0c; 并将它抓取出来&#xff1b;步骤3、explain慢sql分析&…

如何把模型表导入数据库

开发工具与关键技术&#xff1a;Power Designer、SQL 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.23事先说明&#xff0c;我只是一个小萌新&#xff0c;我分享的文章是我在学习过程中学到的&#xff0c;不代表全是正确的&#xff0c;所以我要是有什么地方说错了&#x…

解决eclipse中tomcat无法识别maven web项目问题

eclipse工具中导入了maven web项目, 但是tomcat死活都识别不了, maven项目进行了clean install等操作, 但是仍无效, 后在网上搜索到以下答案, 解决问题 1. 右击项目 -> Debug As -> Maven build... 2. 在Goals中填入: -Dwtpversion2.0 eclipse:eclipse 对于WTP(Web Tool…

深入理解CAS算法原理

转载自 深入理解CAS算法原理1、什么是CAS&#xff1f;CAS&#xff1a;Compare and Swap&#xff0c;即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同…

如何写登录的记住账号

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.27上次我把如何登录的代码给写了&#xff0c;却没有写如何记住登录的账号密码&#xff0c;所以现在我就简单的写一下是如何记住账号密码的。 如果我们没写记住密码的话&am…

严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis

博主 使用Eclipse 下的Mavn搭建的SSM框架的工程&#xff0c;出现以下错误 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener Java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoad…

java高级应用:线程池全面解析

转载自 java高级应用&#xff1a;线程池全面解析 什么是线程池&#xff1f; 很简单&#xff0c;简单看名字就知道是装有线程的池子&#xff0c;我们可以把要执行的多线程交给线程池来处理&#xff0c;和连接池的概念一样&#xff0c;通过维护一定数量的线程池来达到多个线程的复…

如何用for循环出数据库的数据

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.5.30在客房管理的系统中有很多不同的小格子&#xff0c;它们分别代表了不同的房间&#xff0c;可以动态的显示每间房间的状态&#xff0c;这个就是房态图。有很多系统应该都有…

Maven常见问题之【-Dmaven.multiModuleProjectDirctory system property is not set】

配置jdk时&#xff0c;声明vm参数&#xff0c;如下&#xff0c; 且需要保证 M2_HOME 环境变量已经配置了&#xff0c; 如下&#xff1a; C:\Users\pacoson>echo %M2_HOME% D:\software_cluster\apache-maven-3.3.9 -Dmaven.multiModuleProjectDirectory$M2_HOME

实现java多线程的3种方式,99%人没用过第3种

转载自 实现java多线程的3种方式&#xff0c;99%人没用过第3种 实现多线程的3种方式 1、继承Thread类 看jdk源码可以发现&#xff0c;Thread类其实是实现了Runnable接口的一个实例&#xff0c;继承Thread类后需要重写run方法并通过start方法启动线程。 继承Thread类耦合性太强了…

关于时间类型的问题

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.2我在做项目的时候遇到了一个问题&#xff0c;我要把时间显示到表格上&#xff0c;然后我像平常那样写&#xff0c;linq查询&#xff0c;然后返回数据&#xff0c;然后加载…

maven项目不编译xml文件

最近在搭建一个mavenspringMVCmybatis的项目&#xff0c;编译的时候mybatis生成的**Mapper.xml文件总是不编译&#xff08;classes文件夹内没有出现&#xff09;。 解决方法是在maven的pom.xml文件夹<build>标签下增加如下代码&#xff08;build标签的父标签是 project标…

多线程并发神器--ThreadLocal

转载自 多线程并发神器--ThreadLocal什么是ThreadLocal可以理解成线程本地变量&#xff0c;传统的线程对一个变量操作时操作的是同一个对象&#xff0c;也存在线程安全的问题。ThreadLocal是一个变量的本地副本&#xff0c;线程对变量的操作不会影响其他线程。首先看看ThreadLo…

如何获取复选框的值

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.7我们在很多地方都用到了复选框&#xff0c;数据表格里也有复选框&#xff0c;新增数据时也可能要复选框&#xff0c;修改时也要回填复选框&#xff0c;所以我们用到的地方…

使用log4j2打印mybatis的sql执行日志

【1】maven配置jar包依赖&#xff0c; 如下&#xff1a; <!-- 日志jar --><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-…

Java多线程神器:join使用及原理

转载自 Java多线程神器&#xff1a;join使用及原理 join() join()是线程类 Thread的方法&#xff0c;官方的说明是&#xff1a; Waits for this thread to die. 等待这个线程结束&#xff0c;也就是说当前线程等待这个线程结束后再继续执行&#xff0c;下面来看这个示例就明白…

页面残留数据该如何处理

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.13关于页面数据残留的问题&#xff0c;我前几天就遇到了&#xff0c;刚开始的时候我写完那个页面是不知道它有毛病的&#xff0c;后来我才发现了它居然有一个小问题。 先来…

基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置

【0】README&#xff1a;本文旨在给出可以正常跑 测试用例的项目依赖配置&#xff0c; 同时还会给出 maven 编译项目时的坑儿&#xff1b; 【1】 pom配置&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/20…

一张图弄懂java线程的状态和生命周期

转载自 一张图弄懂java线程的状态和生命周期 上图是一个线程的生命周期状态流转图&#xff0c;很清楚的描绘了一个线程从创建到终止的过程。 这些状态的枚举值都定义在java.lang.Thread.State下 NEW&#xff1a;毫无疑问表示的是刚创建的线程&#xff0c;还没有开始启动。 RUNN…

如何添加数据到session中

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.17我们都知道session相当于服务器的一次对话&#xff0c;服务器会为每个新的用户创建一个新的 Session&#xff0c;并在 session 到期时撤销掉这个 Session 对象。所以sess…