package com.yuan.common.asm;
public abstract class AbstractClassLoader extends ClassLoader {
public AbstractClassLoader(ClassLoader parent){
super(parent);
}
protected String getPackageName(String className){
String packageName = "";
int index = className.lastIndexOf(".");
if(index != -1){
packageName = className.substring(0, index);
}
return packageName;
}
protected Class<?> findClass(String name)throws ClassNotFoundException{
String packageName = getPackageName(name);
if(super.getPackage(packageName) == null){
super.definePackage(packageName, packageName, "1.0", "hx", packageName, "1.0", "hx", null);
}
try {
return this.getParent().loadClass(name);
} catch (Exception e) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}
}
protected abstract byte[] loadClassData(String name) throws ClassNotFoundException;
}
自定义类加载器 一
本文介绍了一种自定义ClassLoader的实现方式,通过继承ClassLoader并覆盖findClass方法来动态加载类。该实现还包含了获取包名的功能及类数据的抽象加载过程。

被折叠的 条评论
为什么被折叠?



