Class GroovyScriptFactory
- All Implemented Interfaces:
Aware
,BeanClassLoaderAware
,BeanFactoryAware
,ScriptFactory
ScriptFactory
implementation
for a Groovy script.
Typically used in combination with a
ScriptFactoryPostProcessor
;
see the latter's javadoc for a configuration example.
Note: Spring 4.0 supports Groovy 1.8 and higher.
- Since:
- 2.0
- Author:
- Juergen Hoeller, Rob Harrop, Rod Johnson
- See Also:
-
GroovyClassLoader
ScriptFactoryPostProcessor
-
Constructor Summary
ConstructorDescriptionGroovyScriptFactory
(String scriptSourceLocator) Create a new GroovyScriptFactory for the given script source.GroovyScriptFactory
(String scriptSourceLocator, @Nullable org.codehaus.groovy.control.CompilerConfiguration compilerConfiguration) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can create a custom MetaClass to supply missing methods and otherwise change the behavior of the object.GroovyScriptFactory
(String scriptSourceLocator, @Nullable GroovyObjectCustomizer groovyObjectCustomizer) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can create a custom MetaClass to supply missing methods and otherwise change the behavior of the object.GroovyScriptFactory
(String scriptSourceLocator, org.codehaus.groovy.control.customizers.CompilationCustomizer... compilationCustomizers) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can customize Groovy's compilation process within the underlying GroovyClassLoader. -
Method Summary
Modifier and TypeMethodDescriptionprotected groovy.lang.GroovyClassLoader
buildGroovyClassLoader
(@Nullable ClassLoader classLoader) Build aGroovyClassLoader
for the givenClassLoader
.executeScript
(ScriptSource scriptSource, Class<?> scriptClass) Instantiate the given Groovy script class and run it if necessary.groovy.lang.GroovyClassLoader
Return the GroovyClassLoader used by this script factory.getScriptedObject
(ScriptSource scriptSource, Class<?> @Nullable ... actualInterfaces) Loads and parses the Groovy script via the GroovyClassLoader.getScriptedObjectType
(ScriptSource scriptSource) Determine the type of the scripted Java object.Groovy scripts determine their interfaces themselves, hence we don't need to explicitly expose interfaces here.Return a locator that points to the source of the script.boolean
Groovy scripts do not need a config interface, since they expose their setters as public methods.boolean
requiresScriptedObjectRefresh
(ScriptSource scriptSource) Determine whether a refresh is required (for example, through ScriptSource'sisModified()
method).void
setBeanClassLoader
(ClassLoader classLoader) Callback that supplies the beanclass loader
to a bean instance.void
setBeanFactory
(BeanFactory beanFactory) Callback that supplies the owning factory to a bean instance.toString()
-
Constructor Details
-
GroovyScriptFactory
Create a new GroovyScriptFactory for the given script source.We don't need to specify script interfaces here, since a Groovy script defines its Java interfaces itself.
- Parameters:
scriptSourceLocator
- a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.
-
GroovyScriptFactory
public GroovyScriptFactory(String scriptSourceLocator, @Nullable GroovyObjectCustomizer groovyObjectCustomizer) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can create a custom MetaClass to supply missing methods and otherwise change the behavior of the object.- Parameters:
scriptSourceLocator
- a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.groovyObjectCustomizer
- a customizer that can set a custom metaclass or make other changes to the GroovyObject created by this factory (may benull
)- See Also:
-
GroovyScriptFactory
public GroovyScriptFactory(String scriptSourceLocator, @Nullable org.codehaus.groovy.control.CompilerConfiguration compilerConfiguration) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can create a custom MetaClass to supply missing methods and otherwise change the behavior of the object.- Parameters:
scriptSourceLocator
- a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.compilerConfiguration
- a custom compiler configuration to be applied to the GroovyClassLoader (may benull
)- Since:
- 4.3.3
- See Also:
-
GroovyClassLoader(ClassLoader, CompilerConfiguration)
-
GroovyScriptFactory
public GroovyScriptFactory(String scriptSourceLocator, org.codehaus.groovy.control.customizers.CompilationCustomizer... compilationCustomizers) Create a new GroovyScriptFactory for the given script source, specifying a strategy interface that can customize Groovy's compilation process within the underlying GroovyClassLoader.- Parameters:
scriptSourceLocator
- a locator that points to the source of the script. Interpreted by the post-processor that actually creates the script.compilationCustomizers
- one or more customizers to be applied to the GroovyClassLoader compiler configuration- Since:
- 4.3.3
- See Also:
-
CompilerConfiguration.addCompilationCustomizers(org.codehaus.groovy.control.customizers.CompilationCustomizer...)
ImportCustomizer
-
-
Method Details
-
setBeanFactory
Description copied from interface:BeanFactoryAware
Callback that supplies the owning factory to a bean instance.Invoked after the population of normal bean properties but before an initialization callback such as
InitializingBean.afterPropertiesSet()
or a custom init-method.- Specified by:
setBeanFactory
in interfaceBeanFactoryAware
- Parameters:
beanFactory
- owning BeanFactory (nevernull
). The bean can immediately call methods on the factory.- See Also:
-
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
-
getGroovyClassLoader
public groovy.lang.GroovyClassLoader getGroovyClassLoader()Return the GroovyClassLoader used by this script factory. -
buildGroovyClassLoader
Build aGroovyClassLoader
for the givenClassLoader
.- Parameters:
classLoader
- the ClassLoader to build a GroovyClassLoader for- Since:
- 4.3.3
-
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
Groovy scripts determine their interfaces themselves, hence we don't need to explicitly expose interfaces here.- Specified by:
getScriptInterfaces
in interfaceScriptFactory
- Returns:
null
always
-
requiresConfigInterface
public boolean requiresConfigInterface()Groovy scripts do not need a config interface, since they expose their setters as public methods.- Specified by:
requiresConfigInterface
in interfaceScriptFactory
- Returns:
- whether the script requires a generated config interface
- See Also:
-
getScriptedObject
public @Nullable Object getScriptedObject(ScriptSource scriptSource, Class<?> @Nullable ... actualInterfaces) throws IOException, ScriptCompilationException Loads and parses the Groovy script via the GroovyClassLoader.- 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- See Also:
-
GroovyClassLoader
-
getScriptedObjectType
public @Nullable 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 (for example, 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:
-
executeScript
protected @Nullable Object executeScript(ScriptSource scriptSource, Class<?> scriptClass) throws ScriptCompilationException Instantiate the given Groovy script class and run it if necessary.- Parameters:
scriptSource
- the source for the underlying scriptscriptClass
- the Groovy script class- Returns:
- the result object (either an instance of the script class or the result of running the script instance)
- Throws:
ScriptCompilationException
- in case of instantiation failure
-
toString
-