类 OverridingClassLoader
java.lang.Object
java.lang.ClassLoader
cn.taketoday.core.DecoratingClassLoader
cn.taketoday.core.OverridingClassLoader
ClassLoader that does not always delegate to the parent loader
as normal class loaders do. This enables, for example, instrumentation to be
forced in the overriding ClassLoader, or a "throwaway" class loading behavior
where selected application classes are temporarily loaded in the overriding
ClassLoader for introspection purposes before eventually loading an
instrumented version of the class in the given parent ClassLoader.- 从以下版本开始:
- 4.0
- 作者:
- Rod Johnson, Juergen Hoeller, TODAY 2021/9/11 12:14
-
字段概要
字段 -
构造器概要
构造器构造器说明OverridingClassLoader(ClassLoader parent) Create a new OverridingClassLoader for the given ClassLoader.OverridingClassLoader(ClassLoader parent, ClassLoader overrideDelegate) Create a new OverridingClassLoader for the given ClassLoader. -
方法概要
修饰符和类型方法说明protected booleanisEligibleForOverriding(String className) Determine whether the specified class is eligible for overriding by this class loader.protected byte[]loadBytesForClass(String name) Load the defining bytes for the given class, to be turned into a Class object through aClassLoader.defineClass(byte[], int, int)call.Class<?>protected Class<?>protected Class<?>loadClassForOverriding(String name) Load the specified class for overriding purposes in this ClassLoader.protected InputStreamopenStreamForClass(String name) Open an InputStream for the specified class.protected byte[]transformIfNecessary(String name, byte[] bytes) Transformation hook to be implemented by subclasses.从类继承的方法 cn.taketoday.core.DecoratingClassLoader
excludeClass, excludePackage, isExcluded从类继承的方法 java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
字段详细资料
-
DEFAULT_EXCLUDED_PACKAGES
Packages that are excluded by default.
-
-
构造器详细资料
-
OverridingClassLoader
Create a new OverridingClassLoader for the given ClassLoader.- 参数:
parent- the ClassLoader to build an overriding ClassLoader for
-
OverridingClassLoader
Create a new OverridingClassLoader for the given ClassLoader.- 参数:
parent- the ClassLoader to build an overriding ClassLoader foroverrideDelegate- the ClassLoader to delegate to for overriding- 从以下版本开始:
- 4.0
-
-
方法详细资料
-
loadClass
- 覆盖:
loadClass在类中ClassLoader- 抛出:
ClassNotFoundException
-
loadClass
- 覆盖:
loadClass在类中ClassLoader- 抛出:
ClassNotFoundException
-
isEligibleForOverriding
Determine whether the specified class is eligible for overriding by this class loader.- 参数:
className- the class name to check- 返回:
- whether the specified class is eligible
- 另请参阅:
-
loadClassForOverriding
Load the specified class for overriding purposes in this ClassLoader.The default implementation delegates to
ClassLoader.findLoadedClass(java.lang.String),loadBytesForClass(java.lang.String)andClassLoader.defineClass(byte[], int, int).- 参数:
name- the name of the class- 返回:
- the Class object, or
nullif no class defined for that name - 抛出:
ClassNotFoundException- if the class for the given name couldn't be loaded
-
loadBytesForClass
Load the defining bytes for the given class, to be turned into a Class object through aClassLoader.defineClass(byte[], int, int)call.The default implementation delegates to
openStreamForClass(java.lang.String)andtransformIfNecessary(java.lang.String, byte[]).- 参数:
name- the name of the class- 返回:
- the byte content (with transformers already applied),
or
nullif no class defined for that name - 抛出:
ClassNotFoundException- if the class for the given name couldn't be loaded
-
openStreamForClass
Open an InputStream for the specified class.The default implementation loads a standard class file through the parent ClassLoader's
getResourceAsStreammethod.- 参数:
name- the name of the class- 返回:
- the InputStream containing the byte code for the specified class
-
transformIfNecessary
Transformation hook to be implemented by subclasses.The default implementation simply returns the given bytes as-is.
- 参数:
name- the fully-qualified name of the class being transformedbytes- the raw bytes of the class- 返回:
- the transformed bytes (never
null; same as the input bytes if the transformation produced no changes)
-