More callbacks in preloader
This commit is contained in:
@@ -29,8 +29,12 @@ import java.util.zip.ZipInputStream;
|
|||||||
|
|
||||||
public class ClassPreloadingUtils {
|
public class ClassPreloadingUtils {
|
||||||
|
|
||||||
public interface ClassHandler {
|
public static abstract class ClassHandler {
|
||||||
void beforeDefineClass(String name, int sizeInBytes);
|
public void beforeDefineClass(String name, int sizeInBytes) {}
|
||||||
|
public void afterDefineClass(String name) {}
|
||||||
|
|
||||||
|
public void beforeLoadJar(File jarFile) {}
|
||||||
|
public void afterLoadJar(File jarFile) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -48,7 +52,7 @@ public class ClassPreloadingUtils {
|
|||||||
public static ClassLoader preloadClasses(
|
public static ClassLoader preloadClasses(
|
||||||
Collection<File> jarFiles, int classCountEstimation, ClassLoader parent, ClassHandler handler
|
Collection<File> jarFiles, int classCountEstimation, ClassLoader parent, ClassHandler handler
|
||||||
) throws IOException {
|
) throws IOException {
|
||||||
Map<String, ResourceData> entries = loadAllClassesFromJars(jarFiles, classCountEstimation);
|
Map<String, ResourceData> entries = loadAllClassesFromJars(jarFiles, classCountEstimation, handler);
|
||||||
|
|
||||||
return createMemoryBasedClassLoader(parent, entries, handler);
|
return createMemoryBasedClassLoader(parent, entries, handler);
|
||||||
}
|
}
|
||||||
@@ -86,7 +90,13 @@ public class ClassPreloadingUtils {
|
|||||||
handler.beforeDefineClass(name, sizeInBytes);
|
handler.beforeDefineClass(name, sizeInBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
return defineClass(name, resourceData.bytes, 0, sizeInBytes);
|
Class<?> definedClass = defineClass(name, resourceData.bytes, 0, sizeInBytes);
|
||||||
|
|
||||||
|
if (handler != null) {
|
||||||
|
handler.afterDefineClass(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return definedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -108,10 +118,18 @@ public class ClassPreloadingUtils {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<String, ResourceData> loadAllClassesFromJars(Collection<File> jarFiles, int classNumberEstimate) throws IOException {
|
private static Map<String, ResourceData> loadAllClassesFromJars(
|
||||||
|
Collection<File> jarFiles,
|
||||||
|
int classNumberEstimate,
|
||||||
|
ClassHandler handler
|
||||||
|
) throws IOException {
|
||||||
Map<String, ResourceData> resources = new HashMap<String, ResourceData>(classNumberEstimate);
|
Map<String, ResourceData> resources = new HashMap<String, ResourceData>(classNumberEstimate);
|
||||||
|
|
||||||
for (File jarFile : jarFiles) {
|
for (File jarFile : jarFiles) {
|
||||||
|
if (handler != null) {
|
||||||
|
handler.beforeLoadJar(jarFile);
|
||||||
|
}
|
||||||
|
|
||||||
FileInputStream fileInputStream = new FileInputStream(jarFile);
|
FileInputStream fileInputStream = new FileInputStream(jarFile);
|
||||||
try {
|
try {
|
||||||
byte[] buffer = new byte[10 * 1024];
|
byte[] buffer = new byte[10 * 1024];
|
||||||
@@ -144,6 +162,10 @@ public class ClassPreloadingUtils {
|
|||||||
// Ignore
|
// Ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (handler != null) {
|
||||||
|
handler.afterLoadJar(jarFile);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resources;
|
return resources;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user