Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Class ClassLoader  view ClassLoader download

  extended byjava.lang.ClassLoader
      extended byorg.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."

$Id: 386056 2006-03-15 11:31:56Z tcurdt $

Nested Class Summary
Nested classes inherited from class java.lang.ClassLoader
Field Summary
private  java.util.Hashtable classes
static java.lang.String[] DEFAULT_IGNORED_PACKAGES
private  java.lang.String[] ignored_packages
private  Repository repository
Fields inherited from class java.lang.ClassLoader
Constructor Summary
          Ignored packages are by default ( "java.", "sun.", "javax."), i.e.
ClassLoader(java.lang.ClassLoader deferTo)
ClassLoader(java.lang.ClassLoader deferTo, java.lang.String[] ignored_packages)
ClassLoader(java.lang.String[] ignored_packages)
Method Summary
protected  org.apache.bcel.classfile.JavaClass createClass(java.lang.String class_name)
          Override this method to create you own classes on the fly.
protected  java.lang.Class loadClass(java.lang.String class_name, boolean resolve)
          Load a class using this ClassLoader or its parent, possibly resolving it as well using resolveClass().
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.
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

Field Detail


public static final java.lang.String[] DEFAULT_IGNORED_PACKAGES


private java.util.Hashtable classes


private java.lang.String[] ignored_packages


private Repository repository
Constructor Detail


public ClassLoader()
Ignored packages are by default ( "java.", "sun.", "javax."), i.e. loaded by system class loader


public ClassLoader(java.lang.ClassLoader deferTo)


public ClassLoader(java.lang.String[] ignored_packages)


public ClassLoader(java.lang.ClassLoader deferTo,
                   java.lang.String[] ignored_packages)
Method Detail


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.


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.


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.