java.lang.Object
java.lang.ClassLoader
org.apache.bcel.util.ClassLoader
- public class ClassLoader
- extends java.lang.ClassLoader
Drop in replacement for the standard class loader of the JVM. You can use it
in conjunction with the JavaWrapper to dynamically modify/create classes
as they're requested.
This class loader recognizes special requests in a distinct
format, i.e., when the name of the requested class contains with
"$$BCEL$$" it calls the createClass() method with that name
(everything bevor the $$BCEL$$ is considered to be the package
name. You can subclass the class loader and override that
method. "Normal" classes class can be modified by overriding the
modifyClass() method which is called just before defineClass().
There may be a number of packages where you have to use the
default class loader (which may also be faster). You can define the
set of packages where to use the system class loader in the
constructor. The default value contains "java.", "sun.",
"javax."
- Version:
- $Id: ClassLoader.java 386056 2006-03-15 11:31:56Z tcurdt $
Nested classes inherited from class java.lang.ClassLoader |
|
Methods inherited from class java.lang.ClassLoader |
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
DEFAULT_IGNORED_PACKAGES
public static final java.lang.String[] DEFAULT_IGNORED_PACKAGES
classes
private java.util.Hashtable classes
ignored_packages
private java.lang.String[] ignored_packages
repository
private Repository repository
ClassLoader
public ClassLoader()
- Ignored packages are by default ( "java.", "sun.",
"javax."), i.e. loaded by system class loader
ClassLoader
public ClassLoader(java.lang.ClassLoader deferTo)
ClassLoader
public ClassLoader(java.lang.String[] ignored_packages)
ClassLoader
public ClassLoader(java.lang.ClassLoader deferTo,
java.lang.String[] ignored_packages)
loadClass
protected java.lang.Class loadClass(java.lang.String class_name,
boolean resolve)
throws java.lang.ClassNotFoundException
- Description copied from class:
java.lang.ClassLoader
- Load a class using this ClassLoader or its parent, possibly resolving
it as well using
resolveClass()
. It first tries to find
out if the class has already been loaded through this classloader by
calling findLoadedClass()
. Then it calls
loadClass()
on the parent classloader (or when there is
no parent it uses the VM bootclassloader). If the class is still
not loaded it tries to create a new class by calling
findClass()
. Finally when resolve
is
true
it also calls resolveClass()
on the
newly loaded class.
Subclasses should not override this method but should override
findClass()
which is called by this method.
modifyClass
protected org.apache.bcel.classfile.JavaClass modifyClass(org.apache.bcel.classfile.JavaClass clazz)
- Override this method if you want to alter a class before it gets actually
loaded. Does nothing by default.
createClass
protected org.apache.bcel.classfile.JavaClass createClass(java.lang.String class_name)
- Override this method to create you own classes on the fly. The
name contains the special token $$BCEL$$. Everything before that
token is consddered to be a package name. You can encode you own
arguments into the subsequent string. You must regard however not
to use any "illegal" characters, i.e., characters that may not
appear in a Java class name too
The default implementation interprets the string as a encoded compressed
Java class, unpacks and decodes it with the Utility.decode() method, and
parses the resulting byte array and returns the resulting JavaClass object.