Class StandardScriptFactory
- java.lang.Object
- org.springframework.scripting.support.StandardScriptFactory
- All Implemented Interfaces:
Aware,BeanClassLoaderAware,ScriptFactory
public class StandardScriptFactory extends Object implements ScriptFactory, BeanClassLoaderAware
ScriptFactoryimplementation 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:
ScriptFactoryPostProcessor
Constructor Summary
Constructors Constructor 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.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ObjectadaptToInterfaces(Object script, ScriptSource scriptSource, Class<?>... actualInterfaces)protected ObjectevaluateScript(ScriptSource scriptSource)ObjectgetScriptedObject(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.StringgetScriptSourceLocator()Return a locator that points to the source of the script.booleanrequiresConfigInterface()Return whether the script requires a config interface to be generated for it.booleanrequiresScriptedObjectRefresh(ScriptSource scriptSource)Determine whether a refresh is required (e.g.protected ScriptEngineretrieveScriptEngine(ScriptSource scriptSource)voidsetBeanClassLoader(ClassLoader classLoader)Callback that supplies the beanclass loaderto a bean instance.StringtoString()
Constructor Detail
StandardScriptFactory
public StandardScriptFactory(String scriptSourceLocator)
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
public StandardScriptFactory(String scriptSourceLocator, Class<?>... scriptInterfaces)
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
public StandardScriptFactory(String scriptEngineName, String scriptSourceLocator)
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(String scriptEngineName, String scriptSourceLocator, 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 Detail
setBeanClassLoader
public void setBeanClassLoader(ClassLoader classLoader)
Description copied from interface:BeanClassLoaderAwareCallback that supplies the beanclass loaderto a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean'sInitializingBean.afterPropertiesSet()method or a custom init-method.- Specified by:
setBeanClassLoaderin interfaceBeanClassLoaderAware- Parameters:
classLoader- the owning class loader; may benullin which case a defaultClassLoadermust be used, for example theClassLoaderobtained viaClassUtils.getDefaultClassLoader()
getScriptSourceLocator
public String getScriptSourceLocator()
Description copied from interface:ScriptFactoryReturn 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:
getScriptSourceLocatorin interfaceScriptFactory- Returns:
- the script source locator
- See Also:
ScriptFactoryPostProcessor.convertToScriptSource(java.lang.String, java.lang.String, org.springframework.core.io.ResourceLoader),ResourceLoader
getScriptInterfaces
public Class<?>[] getScriptInterfaces()
Description copied from interface:ScriptFactoryReturn the business interfaces that the script is supposed to implement.Can return
nullif the script itself determines its Java interfaces (such as in the case of Groovy).- Specified by:
getScriptInterfacesin interfaceScriptFactory- Returns:
- the interfaces for the script
requiresConfigInterface
public boolean requiresConfigInterface()
Description copied from interface:ScriptFactoryReturn 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:
requiresConfigInterfacein interfaceScriptFactory- Returns:
- whether the script requires a generated config interface
- See Also:
ScriptFactory.getScriptInterfaces()
getScriptedObject
public Object getScriptedObject(ScriptSource scriptSource, Class<?>... actualInterfaces) throws IOException, ScriptCompilationException
Load and parse the script via JSR-223's ScriptEngine.- Specified by:
getScriptedObjectin 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
protected Object evaluateScript(ScriptSource scriptSource)
retrieveScriptEngine
protected ScriptEngine retrieveScriptEngine(ScriptSource scriptSource)
adaptToInterfaces
protected Object adaptToInterfaces(Object script, ScriptSource scriptSource, Class<?>... actualInterfaces)
getScriptedObjectType
public Class<?> getScriptedObjectType(ScriptSource scriptSource) throws IOException, ScriptCompilationException
Description copied from interface:ScriptFactoryDetermine 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:
getScriptedObjectTypein interfaceScriptFactory- Parameters:
scriptSource- the actual ScriptSource to retrieve the script source text from (nevernull)- Returns:
- the type of the scripted Java object, or
nullif none could be determined - Throws:
IOException- if script retrieval failedScriptCompilationException- if script compilation failed
requiresScriptedObjectRefresh
public boolean requiresScriptedObjectRefresh(ScriptSource scriptSource)
Description copied from interface:ScriptFactoryDetermine whether a refresh is required (e.g. through ScriptSource'sisModified()method).- Specified by:
requiresScriptedObjectRefreshin 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:
ScriptSource.isModified()