public class StandardScriptFactory extends Object implements ScriptFactory, BeanClassLoaderAware
ScriptFactory implementation based
on the JSR-223 script engine abstraction (as included in Java).
Supports JavaScript, Groovy, JRuby, and other JSR-223 compliant engines.
Typically used in combination with a
ScriptFactoryPostProcessor;
see the latter's javadoc for a configuration example.
ScriptFactoryPostProcessor| Constructor and Description |
|---|
StandardScriptFactory(String scriptSourceLocator)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(String scriptSourceLocator,
Class<?>... scriptInterfaces)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(String scriptEngineName,
String scriptSourceLocator)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(String scriptEngineName,
String scriptSourceLocator,
Class<?>... scriptInterfaces)
Create a new StandardScriptFactory for the given script source.
|
| Modifier and Type | Method and Description |
|---|---|
protected Object |
adaptToInterfaces(Object script,
ScriptSource scriptSource,
Class<?>... actualInterfaces) |
protected Object |
evaluateScript(ScriptSource scriptSource) |
Object |
getScriptedObject(ScriptSource scriptSource,
Class<?>... actualInterfaces)
Load and parse the script via JSR-223's ScriptEngine.
|
Class<?> |
getScriptedObjectType(ScriptSource scriptSource)
Determine the type of the scripted Java object.
|
Class<?>[] |
getScriptInterfaces()
Return the business interfaces that the script is supposed to implement.
|
String |
getScriptSourceLocator()
Return a locator that points to the source of the script.
|
boolean |
requiresConfigInterface()
Return whether the script requires a config interface to be
generated for it.
|
boolean |
requiresScriptedObjectRefresh(ScriptSource scriptSource)
Determine whether a refresh is required (e.g.
|
protected ScriptEngine |
retrieveScriptEngine(ScriptSource scriptSource) |
void |
setBeanClassLoader(ClassLoader classLoader)
Callback that supplies the bean
class loader to
a bean instance. |
String |
toString() |
public StandardScriptFactory(String scriptSourceLocator)
scriptSourceLocator - a locator that points to the source of the script.
Interpreted by the post-processor that actually creates the script.public StandardScriptFactory(String scriptSourceLocator, Class<?>... scriptInterfaces)
scriptSourceLocator - a locator that points to the source of the script.
Interpreted by the post-processor that actually creates the script.scriptInterfaces - the Java interfaces that the scripted object
is supposed to implementpublic StandardScriptFactory(String scriptEngineName, String scriptSourceLocator)
scriptEngineName - the name of the JSR-223 ScriptEngine to use
(explicitly given instead of inferred from the script source)scriptSourceLocator - a locator that points to the source of the script.
Interpreted by the post-processor that actually creates the script.public StandardScriptFactory(@Nullable String scriptEngineName, String scriptSourceLocator, @Nullable Class<?>... scriptInterfaces)
scriptEngineName - the name of the JSR-223 ScriptEngine to use
(explicitly given instead of inferred from the script source)scriptSourceLocator - a locator that points to the source of the script.
Interpreted by the post-processor that actually creates the script.scriptInterfaces - the Java interfaces that the scripted object
is supposed to implementpublic void setBeanClassLoader(ClassLoader classLoader)
BeanClassLoaderAwareclass loader to
a bean instance.
Invoked after the population of normal bean properties but
before an initialization callback such as
InitializingBean's
InitializingBean.afterPropertiesSet()
method or a custom init-method.
setBeanClassLoader in interface BeanClassLoaderAwareclassLoader - the owning class loaderpublic String getScriptSourceLocator()
ScriptFactoryTypical supported locators are Spring resource locations (such as "file:C:/myScript.bsh" or "classpath:myPackage/myScript.bsh") and inline scripts ("inline:myScriptText...").
getScriptSourceLocator in interface ScriptFactoryScriptFactoryPostProcessor.convertToScriptSource(java.lang.String, java.lang.String, org.springframework.core.io.ResourceLoader),
ResourceLoader@Nullable public Class<?>[] getScriptInterfaces()
ScriptFactoryCan return null if the script itself determines
its Java interfaces (such as in the case of Groovy).
getScriptInterfaces in interface ScriptFactorypublic boolean requiresConfigInterface()
ScriptFactorygetScriptInterfaces().requiresConfigInterface in interface ScriptFactoryScriptFactory.getScriptInterfaces()@Nullable public Object getScriptedObject(ScriptSource scriptSource, @Nullable Class<?>... actualInterfaces) throws IOException, ScriptCompilationException
getScriptedObject in interface ScriptFactoryscriptSource - the actual ScriptSource to retrieve
the script source text from (never null)actualInterfaces - the actual interfaces to expose,
including script interfaces as well as a generated config interface
(if applicable; may be null)IOException - if script retrieval failedScriptCompilationException - if script compilation failedprotected Object evaluateScript(ScriptSource scriptSource)
@Nullable protected ScriptEngine retrieveScriptEngine(ScriptSource scriptSource)
@Nullable protected Object adaptToInterfaces(@Nullable Object script, ScriptSource scriptSource, Class<?>... actualInterfaces)
@Nullable public Class<?> getScriptedObjectType(ScriptSource scriptSource) throws IOException, ScriptCompilationException
ScriptFactoryImplementations are encouraged to cache script metadata such as a generated script class. Note that this method may be invoked concurrently and must be implemented in a thread-safe fashion.
getScriptedObjectType in interface ScriptFactoryscriptSource - the actual ScriptSource to retrieve
the script source text from (never null)null
if none could be determinedIOException - if script retrieval failedScriptCompilationException - if script compilation failedpublic boolean requiresScriptedObjectRefresh(ScriptSource scriptSource)
ScriptFactoryisModified() method).requiresScriptedObjectRefresh in interface ScriptFactoryscriptSource - the actual ScriptSource to retrieve
the script source text from (never null)ScriptFactory.getScriptedObject(org.springframework.scripting.ScriptSource, java.lang.Class<?>...) call is requiredScriptSource.isModified()