public class MyClassLoader
extends java.lang.ClassLoader
Modifier and Type | Field and Description |
---|---|
protected boolean |
_cfgUseParentLoader
Flag that determines if we should first try to load new class
using parent class loader or not; this may be done to try to
force access to protected/package-access properties.
|
private static java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Object> |
parentParallelLockMap |
private static java.nio.charset.Charset |
UTF8 |
Constructor and Description |
---|
MyClassLoader(java.lang.ClassLoader parent,
boolean tryToUseParent) |
Modifier and Type | Method and Description |
---|---|
static boolean |
canAddClassInPackageOf(java.lang.Class<?> cls)
Helper method called to check whether it is acceptable to create a new
class in package that given class is part of.
|
(package private) java.lang.Class<?> |
defineClassOnParent(java.lang.ClassLoader parentClassLoader,
java.lang.String className,
byte[] byteCode,
int offset,
int length) |
private java.lang.Class<?> |
findLoadedClassOnParent(java.lang.ClassLoader parentClassLoader,
java.lang.String className) |
private java.lang.Object |
getParentClassLoadingLock(java.lang.ClassLoader parentClassLoader,
java.lang.String className)
Get the class loading lock for the parent class loader for loading the named class.
|
java.lang.Class<?> |
loadAndResolve(ClassName className,
byte[] byteCode) |
private java.lang.Class<?> |
loadAndResolveUsingParentClassloader(ClassName className,
byte[] byteCode)
Attempt to load (and resolve) the class using the parent class loader (if it is configured and present).
|
static int |
replaceName(byte[] byteCode,
java.lang.String from,
java.lang.String to) |
private void |
resolveClassOnParent(java.lang.ClassLoader parentClassLoader,
java.lang.Class<?> clazz) |
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
private static final java.nio.charset.Charset UTF8
private static final java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.Object> parentParallelLockMap
protected final boolean _cfgUseParentLoader
public MyClassLoader(java.lang.ClassLoader parent, boolean tryToUseParent)
public static boolean canAddClassInPackageOf(java.lang.Class<?> cls)
public java.lang.Class<?> loadAndResolve(ClassName className, byte[] byteCode) throws java.lang.IllegalArgumentException
className
- Interface or abstract class that class to load should extend or
implementjava.lang.IllegalArgumentException
private java.lang.Class<?> loadAndResolveUsingParentClassloader(ClassName className, byte[] byteCode)
null
if the parent classloader is not configured or cannot be retrieved.className
- Interface or abstract class that class to load should extend or implementbyteCode
- the generated bytecode for the class to loadnull
if the class could not be loaded on the parent classloader.private java.lang.Object getParentClassLoadingLock(java.lang.ClassLoader parentClassLoader, java.lang.String className)
parentClassLoader
- The parent ClassLoaderclassName
- The name of the to-be-loaded classprivate java.lang.Class<?> findLoadedClassOnParent(java.lang.ClassLoader parentClassLoader, java.lang.String className)
java.lang.Class<?> defineClassOnParent(java.lang.ClassLoader parentClassLoader, java.lang.String className, byte[] byteCode, int offset, int length)
private void resolveClassOnParent(java.lang.ClassLoader parentClassLoader, java.lang.Class<?> clazz)
public static int replaceName(byte[] byteCode, java.lang.String from, java.lang.String to)