Deprecated
6.0 Do not use - does not work
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."
JavaWrapper, ClassPath
| Modifier and Type | Field and Description |
|---|---|
| private static final String | |
| private final Hashtable | |
| public static final String[] | |
| private final String[] | |
| private Repository |
| Access | Constructor and Description |
|---|---|
| public | ClassLoader()
Ignored packages are by default ( "java.", "sun.", "javax."), i.e. loaded by system class loader |
| public | |
| public | ClassLoader(final ClassLoader
delegate class loader to use for ignored packages deferTo, final String[] classes contained in these packages will be loaded with the system class loader ignoredPackages)
|
| public | ClassLoader(final String[]
classes contained in these packages will be loaded with the system class loader ignoredPackages)
|
| Modifier and Type | Method and Description |
|---|---|
| protected JavaClass | createClass(final String
compressed byte code with "$$BCEL$$" in it className)Override this method to create you own classes on the fly. |
| protected Class | loadClass(final String
The binary name of the class className, final boolean If resolve)true then resolve the classOverrides java. |
| protected JavaClass | modifyClass(final JavaClass clazz)
Override this method if you want to alter a class before it gets actually loaded. |
| BCEL_TOKEN | back to summary |
|---|---|
| private static final String BCEL_TOKEN | |
| classes | back to summary |
|---|---|
| private final Hashtable<String, Class<?>> classes | |
| DEFAULT_IGNORED_PACKAGES | back to summary |
|---|---|
| public static final String[] DEFAULT_IGNORED_PACKAGES | |
| ignoredPackages | back to summary |
|---|---|
| private final String[] ignoredPackages | |
| repository | back to summary |
|---|---|
| private Repository repository | |
| ClassLoader | back to summary |
|---|---|
| public ClassLoader() Ignored packages are by default ( "java.", "sun.", "javax."), i.e. loaded by system class loader | |
| ClassLoader | back to summary |
|---|---|
public ClassLoader(final ClassLoader deferTo)
| |
| ClassLoader | back to summary |
|---|---|
public ClassLoader(final ClassLoader deferTo, final String[] ignoredPackages)
| |
| ClassLoader | back to summary |
|---|---|
public ClassLoader(final String[] ignoredPackages)
| |
| createClass | back to summary |
|---|---|
| protected JavaClass createClass(final String className) Override this method to create you own classes on the fly. The name contains the special token $$BCEL$$. Everything before that token is considered to be a package name. You can encode your own arguments into the subsequent string. You must ensure 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.
| |
| loadClass | back to summary |
|---|---|
| protected Class Overrides java. Doc from java. Loads the class with the specified binary name. The default implementation of this method searches for classes in the following order:
If the class was found using the above steps, and the
Subclasses of Unless overridden, this method synchronizes on the result of
| |
| modifyClass | back to summary |
|---|---|
| protected JavaClass modifyClass(final JavaClass clazz) Override this method if you want to alter a class before it gets actually loaded. Does nothing by default. | |