Package org.powermock.classloading
Interface ClassloaderExecutor
-
- All Known Implementing Classes:
AbstractClassloaderExecutor,SingleClassloaderExecutor
public interface ClassloaderExecutorA ClassLoaderExecutor can run any code in any classloader. E.g. assume you have a classloader called myClassloader and you want to execute a (void) method called myMethod in myObject using this CL:SingleClassloaderExecutor cle = new SingleClassloaderExecutor(myClassloader); cle.execute(new Runnable() { public void run() { myObject.myMethod(); } });What happens is that the entire object graph of myObject is deep-cloned into themyClassloaderclassloader and then themyObject.myMethod()is executed.You can also execute methods that return something:
SingleClassloaderExecutor cle = new SingleClassloaderExecutor(myClassloader); MyResult result = cle.execute(new CallableHere we imagine that() { public MyResult call() throws Exception { return myObject.myMethod(); } }); myObject.myMethod()returns an object of typeMyResult. Again the entire state will be deep-cloned tomyClassloaderand then themyObject.myMethod()is executed. The result of the method call is deep-cloned back into the original classloader (the one that made the call tocle.execute(..)) and is ready for use.Note that the SingleClassloaderExecutor requires a deep cloner implementing the
DeepClonerSPIpresent in the class-path.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description voidexecute(java.lang.Runnable runnable)<T> Texecute(java.util.concurrent.Callable<T> callable)
-