public class StandardScriptFactory extends java.lang.Object implements ScriptFactory, BeanClassLoaderAware
ScriptFactory
implementation based
on the JSR-223 script engine abstraction (as included in Java 6+).
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(java.lang.String scriptSourceLocator)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(java.lang.String scriptSourceLocator,
java.lang.Class<?>... scriptInterfaces)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(java.lang.String scriptEngineName,
java.lang.String scriptSourceLocator)
Create a new StandardScriptFactory for the given script source.
|
StandardScriptFactory(java.lang.String scriptEngineName,
java.lang.String scriptSourceLocator,
java.lang.Class<?>... scriptInterfaces)
Create a new StandardScriptFactory for the given script source.
|
Modifier and Type | Method and Description |
---|---|
protected java.lang.Object |
adaptToInterfaces(java.lang.Object script,
ScriptSource scriptSource,
java.lang.Class<?>... actualInterfaces) |
protected java.lang.Object |
evaluateScript(ScriptSource scriptSource) |
java.lang.Object |
getScriptedObject(ScriptSource scriptSource,
java.lang.Class<?>... actualInterfaces)
Load and parse the script via JSR-223's ScriptEngine.
|
java.lang.Class<?> |
getScriptedObjectType(ScriptSource scriptSource)
Determine the type of the scripted Java object.
|
java.lang.Class<?>[] |
getScriptInterfaces()
Return the business interfaces that the script is supposed to implement.
|
java.lang.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 javax.script.ScriptEngine |
retrieveScriptEngine(ScriptSource scriptSource) |
void |
setBeanClassLoader(java.lang.ClassLoader classLoader)
Callback that supplies the bean
class loader to
a bean instance. |
java.lang.String |
toString() |
public StandardScriptFactory(java.lang.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(java.lang.String scriptSourceLocator, java.lang.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(java.lang.String scriptEngineName, java.lang.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 java.lang.String scriptEngineName, java.lang.String scriptSourceLocator, @Nullable java.lang.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(java.lang.ClassLoader classLoader)
BeanClassLoaderAware
class 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 BeanClassLoaderAware
classLoader
- the owning class loaderpublic java.lang.String getScriptSourceLocator()
ScriptFactory
Typical 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 ScriptFactory
ScriptFactoryPostProcessor.convertToScriptSource(java.lang.String, java.lang.String, org.springframework.core.io.ResourceLoader)
,
ResourceLoader
@Nullable public java.lang.Class<?>[] getScriptInterfaces()
ScriptFactory
Can return null
if the script itself determines
its Java interfaces (such as in the case of Groovy).
getScriptInterfaces
in interface ScriptFactory
public boolean requiresConfigInterface()
ScriptFactory
getScriptInterfaces()
.requiresConfigInterface
in interface ScriptFactory
ScriptFactory.getScriptInterfaces()
@Nullable public java.lang.Object getScriptedObject(ScriptSource scriptSource, @Nullable java.lang.Class<?>... actualInterfaces) throws java.io.IOException, ScriptCompilationException
getScriptedObject
in interface ScriptFactory
scriptSource
- 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
)java.io.IOException
- if script retrieval failedScriptCompilationException
- if script compilation failedprotected java.lang.Object evaluateScript(ScriptSource scriptSource)
@Nullable protected javax.script.ScriptEngine retrieveScriptEngine(ScriptSource scriptSource)
@Nullable protected java.lang.Object adaptToInterfaces(@Nullable java.lang.Object script, ScriptSource scriptSource, java.lang.Class<?>... actualInterfaces)
@Nullable public java.lang.Class<?> getScriptedObjectType(ScriptSource scriptSource) throws java.io.IOException, ScriptCompilationException
ScriptFactory
Implementations 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 ScriptFactory
scriptSource
- the actual ScriptSource to retrieve
the script source text from (never null
)null
if none could be determinedjava.io.IOException
- if script retrieval failedScriptCompilationException
- if script compilation failedpublic boolean requiresScriptedObjectRefresh(ScriptSource scriptSource)
ScriptFactory
isModified()
method).requiresScriptedObjectRefresh
in interface ScriptFactory
scriptSource
- 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()
public java.lang.String toString()
toString
in class java.lang.Object