Class StandardScriptFactory
- All Implemented Interfaces:
Aware
,BeanClassLoaderAware
,ScriptFactory
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.
- Since:
- 4.2
- Author:
- Juergen Hoeller
- See Also:
-
Constructor Summary
ConstructorDescriptionStandardScriptFactory
(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. -
Method Summary
Modifier and TypeMethodDescriptionprotected Object
adaptToInterfaces
(Object script, ScriptSource scriptSource, Class<?>... actualInterfaces) protected Object
evaluateScript
(ScriptSource scriptSource) 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<?>[]
Return the business interfaces that the script is supposed to implement.Return a locator that points to the source of the script.boolean
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 beanclass loader
to a bean instance.toString()
-
Constructor Details
-
StandardScriptFactory
Create a new StandardScriptFactory for the given script source.- Parameters:
scriptSourceLocator
- a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.
-
StandardScriptFactory
Create a new StandardScriptFactory for the given script source.- Parameters:
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 implement
-
StandardScriptFactory
Create a new StandardScriptFactory for the given script source.- Parameters:
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.
-
StandardScriptFactory
public StandardScriptFactory(@Nullable String scriptEngineName, String scriptSourceLocator, @Nullable Class<?>... scriptInterfaces) Create a new StandardScriptFactory for the given script source.- Parameters:
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 implement
-
-
Method Details
-
setBeanClassLoader
Description copied from interface:BeanClassLoaderAware
Callback that supplies the beanclass 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.- Specified by:
setBeanClassLoader
in interfaceBeanClassLoaderAware
- Parameters:
classLoader
- the owning class loader
-
getScriptSourceLocator
Description copied from interface:ScriptFactory
Return a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.Typical supported locators are Spring resource locations (such as "file:C:/myScript.bsh" or "classpath:myPackage/myScript.bsh") and inline scripts ("inline:myScriptText...").
- Specified by:
getScriptSourceLocator
in interfaceScriptFactory
- Returns:
- the script source locator
- See Also:
-
getScriptInterfaces
Description copied from interface:ScriptFactory
Return the business interfaces that the script is supposed to implement.Can return
null
if the script itself determines its Java interfaces (such as in the case of Groovy).- Specified by:
getScriptInterfaces
in interfaceScriptFactory
- Returns:
- the interfaces for the script
-
requiresConfigInterface
public boolean requiresConfigInterface()Description copied from interface:ScriptFactory
Return whether the script requires a config interface to be generated for it. This is typically the case for scripts that do not determine Java signatures themselves, with no appropriate config interface specified ingetScriptInterfaces()
.- Specified by:
requiresConfigInterface
in interfaceScriptFactory
- Returns:
- whether the script requires a generated config interface
- See Also:
-
getScriptedObject
@Nullable public Object getScriptedObject(ScriptSource scriptSource, @Nullable Class<?>... actualInterfaces) throws IOException, ScriptCompilationException Load and parse the script via JSR-223's ScriptEngine.- Specified by:
getScriptedObject
in interfaceScriptFactory
- Parameters:
scriptSource
- the actual ScriptSource to retrieve the script source text from (nevernull
)actualInterfaces
- the actual interfaces to expose, including script interfaces as well as a generated config interface (if applicable; may benull
)- Returns:
- the scripted Java object
- Throws:
IOException
- if script retrieval failedScriptCompilationException
- if script compilation failed
-
evaluateScript
-
retrieveScriptEngine
-
adaptToInterfaces
-
getScriptedObjectType
@Nullable public Class<?> getScriptedObjectType(ScriptSource scriptSource) throws IOException, ScriptCompilationException Description copied from interface:ScriptFactory
Determine the type of the scripted Java object.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.
- Specified by:
getScriptedObjectType
in interfaceScriptFactory
- Parameters:
scriptSource
- the actual ScriptSource to retrieve the script source text from (nevernull
)- Returns:
- the type of the scripted Java object, or
null
if none could be determined - Throws:
IOException
- if script retrieval failedScriptCompilationException
- if script compilation failed
-
requiresScriptedObjectRefresh
Description copied from interface:ScriptFactory
Determine whether a refresh is required (e.g. through ScriptSource'sisModified()
method).- Specified by:
requiresScriptedObjectRefresh
in interfaceScriptFactory
- Parameters:
scriptSource
- the actual ScriptSource to retrieve the script source text from (nevernull
)- Returns:
- whether a fresh
ScriptFactory.getScriptedObject(org.springframework.scripting.ScriptSource, java.lang.Class<?>...)
call is required - See Also:
-
toString
-