|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--bsh.BshClassManager
BshClassManager manages all classloading in BeanShell. It also supports a dynamically loaded extension (bsh.classpath package) which allows classpath extension and class file reloading. Currently the extension relies on 1.2 for BshClassLoader and weak references. See http://www.beanshell.org/manual/classloading.html for details on the bsh classloader architecture.
Bsh has a multi-tiered class loading architecture. No class loader is used unless/until the classpath is modified or a class is reloaded.
Note: currently class loading features affect all instances of the Interpreter. However the basic design of this class will allow for per instance class management in the future if it is desired.
Nested Class Summary | |
static interface |
BshClassManager.Listener
|
Field Summary | |
protected static java.util.Hashtable |
absoluteClassCache
Global cache for things we know are classes. |
protected static java.util.Hashtable |
absoluteNonClasses
Global cache for things we know are *not* classes. |
private static boolean |
checkedForManager
|
private static java.lang.ClassLoader |
externalClassLoader
An external classloader supplied by the setClassLoader() command. |
private static BshClassManager |
manager
Singleton class manager |
private static java.lang.Object |
NOVALUE
|
Constructor Summary | |
BshClassManager()
|
Method Summary | |
abstract void |
addClassPath(java.net.URL path)
|
static void |
addCMListener(BshClassManager.Listener l)
Add a BshClassManager.Listener to the class manager. |
abstract void |
addListener(BshClassManager.Listener l)
|
static void |
cacheClassInfo(java.lang.String name,
java.lang.Class value)
Cache info about whether name is a class or not. |
static boolean |
classExists(java.lang.String name)
|
static java.lang.Class |
classForName(java.lang.String name)
Load the specified class by name, taking into account added classpath and reloaded classes, etc. |
protected abstract void |
classLoaderChanged()
|
protected void |
clearCaches()
Clear the static caches in BshClassManager |
abstract void |
doSuperImport()
Support for "import *;" Hide details in here as opposed to NameSpace. |
abstract void |
dump(java.io.PrintWriter pw)
|
abstract java.lang.ClassLoader |
getBaseLoader()
|
abstract java.lang.Class |
getClassForName(java.lang.String name)
|
static BshClassManager |
getClassManager()
|
abstract java.lang.String |
getClassNameByUnqName(java.lang.String name)
Return the name or null if none is found, Throw an ClassPathException containing detail if name is ambigous. |
abstract java.lang.ClassLoader |
getLoaderForClass(java.lang.String name)
|
abstract java.lang.Class |
getPlainClassForName(java.lang.String name)
Delegate for plainClassForName. |
static java.lang.Class |
plainClassForName(java.lang.String name)
Perform a plain Class.forName() or call the externally provided class loader. |
abstract void |
reloadAllClasses()
Overlay the entire path with a new class loader. |
abstract void |
reloadClasses(java.lang.String[] classNames)
Reloading classes means creating a new classloader and using it whenever we are asked for classes in the appropriate space. |
abstract void |
reloadPackage(java.lang.String pack)
Reload all classes in the specified package: e.g. |
abstract void |
removeListener(BshClassManager.Listener l)
|
abstract void |
reset()
Clear all loaders and start over. |
static void |
setClassLoader(java.lang.ClassLoader externalCL)
Set an external class loader. |
abstract void |
setClassPath(java.net.URL[] cp)
Set a new base classpath and create a new base classloader. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
private static BshClassManager manager
private static boolean checkedForManager
private static java.lang.Object NOVALUE
private static java.lang.ClassLoader externalClassLoader
protected static transient java.util.Hashtable absoluteClassCache
protected static transient java.util.Hashtable absoluteNonClasses
Constructor Detail |
public BshClassManager()
Method Detail |
public static BshClassManager getClassManager()
public static boolean classExists(java.lang.String name)
public static java.lang.Class classForName(java.lang.String name)
public static java.lang.Class plainClassForName(java.lang.String name) throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
getPlainClassForName( String )
public static void cacheClassInfo(java.lang.String name, java.lang.Class value)
value
- if value is non-null, cache the class
if value is null, set the flag that it is *not* a class to
speed later resolutionprotected void clearCaches()
public static void addCMListener(BshClassManager.Listener l)
public static void setClassLoader(java.lang.ClassLoader externalCL)
public abstract java.lang.Class getClassForName(java.lang.String name)
classForName( String )
public abstract java.lang.Class getPlainClassForName(java.lang.String name) throws java.lang.ClassNotFoundException
java.lang.ClassNotFoundException
plainClassForName( String )
public abstract java.lang.ClassLoader getBaseLoader()
public abstract java.lang.ClassLoader getLoaderForClass(java.lang.String name)
public abstract void addClassPath(java.net.URL path) throws java.io.IOException
java.io.IOException
public abstract void reset()
public abstract void setClassPath(java.net.URL[] cp)
public abstract void reloadAllClasses() throws ClassPathException
ClassPathException
public abstract void reloadClasses(java.lang.String[] classNames) throws ClassPathException
ClassPathException
public abstract void reloadPackage(java.lang.String pack) throws ClassPathException
ClassPathException
public abstract void doSuperImport() throws EvalError
EvalError
public abstract java.lang.String getClassNameByUnqName(java.lang.String name) throws ClassPathException
ClassPathException
public abstract void addListener(BshClassManager.Listener l)
public abstract void removeListener(BshClassManager.Listener l)
public abstract void dump(java.io.PrintWriter pw)
protected abstract void classLoaderChanged()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |