package com.yuan.common.asm;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.yuan.common.collection.ListEnumeration;
import com.yuan.common.file.FileUtil;
public class ClassesClassLoader extends AbstractClassLoader {
private static final Logger logger = LoggerFactory.getLogger(ClassesClassLoader.class);
private List<String> classesPathList;
public ClassesClassLoader(String classesPath, ClassLoader parent){
super(parent);
classesPathList = new ArrayList<String>();
classesPathList.add(classesPath);
}
public ClassesClassLoader(List<String> classesPathList, ClassLoader parent){
super(parent);
this.classesPathList = classesPathList;
}
protected File searchFile(String child){
for(String classesPath : classesPathList){
File f = new File(new File(classesPath), child);
if(f.exists()){
return f;
}
}
return null;
}
protected byte[] loadClassData(String name) throws ClassNotFoundException{
String child = name.replaceAll("\\.", "/") + ".class";
File classFile = searchFile(child);
if(classFile != null){
try {
return FileUtil.readBinaryFile(classFile);
} catch (IOException e) {
logger.warn(e.getMessage(), e);
throw new ClassNotFoundException(e.getMessage(), e);
}
}
throw new ClassNotFoundException(name);
}
protected URL findResource(String name) {
File f = searchFile(name);
if(f != null){
try {
return f.toURI().toURL();
} catch (MalformedURLException e) {
logger.warn(e.getMessage(), e);
}
}
return null;
}
protected Enumeration<URL> findResources(String name) throws IOException {
ListEnumeration<URL> list = new ListEnumeration<URL>();
URL url = findResource(name);
if(url != null){
list.add(url);
}
return list;
}
}
分享到:
相关推荐
自定义类加载器实现自定义加载。自定义类加载器实现自定义加载
简单的自定义类加载器问候世界hello word,基于磁盘的ClassLoader
看完一个Java加载原理教程后,写了这个自己的类加载器,作个笔记,以便以且使用
3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4
java类加载器学习二、自定义类加载器
Java加壳核心代码,请调试后使用。本资源配合博客进行讲解,博客地址:http://blog.csdn.net/JavaBuilt/article/details/79522837
主要介绍了Java基于自定义类加载器实现热部署过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java实现的自定义类加载器,结合具体实例形式分析了java自定义类加载器的原理与具体实现技巧,需要的朋友可以参考下
3-7Tomcat中自定义类加载器的使用与源码实现(2).mp4
ClassLoader的API使用和自定义
主要介绍了java自定义类加载器代码示例,具有一定借鉴价值,需要的朋友可以了解下。
DevLoader.zip tomcat 类加载器
自定义Java类加载器demo,自定义了一个classLoader,重写了loadClass 和findClass,注意 loadClass打破了双亲委派机制,所有的类都要在自定义的class文件中找到,而findClass遵循了双亲委派机制
本文主要介绍了java 类加载与自定义类加载器。具有一定的参考价值,下面跟着小编一起来看下吧
java,自定义加载类的实现。1.自定义加载类的实现。2双亲委派的验证。3如何制定父类加载器。
JCL是可配置,动态和可扩展的自定义类加载器,可直接从Jar文件和其他来源加载Java类。 这样做的动机是创建隔离的类加载器,该类加载器可以轻松地与IoC框架(如Spring)和Web应用程序集成。 整个库,包括其代码库和...
iOS中的高性能自定义点加载指示器
主要介绍了Java语言中的自定义类加载器实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
Java允许使用不同的类加载器,甚至自定义的类加载器。类加载器从源文件(通常是.class 或 .jar文件)获得不依赖平台的字节码,然后将它们加载到JVM内存空间,所以它们能被解释和执行。默认状态下,应用程序的每个类...
通过DexClassLoader类加载器来解析优化前面的dex文件 通过DexClassLoader的loadClass函数来载入类 通过获得到的类的newInstance函数来生成需要的对象 开始使用获取到的动态类对象~\(≧▽≦)/~啦啦啦