| java.lang.Object org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter org.springframework.scripting.support.ScriptFactoryPostProcessor
ScriptFactoryPostProcessor | public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanClassLoaderAware,BeanFactoryAware,ResourceLoaderAware,DisposableBean,Ordered(Code) | | org.springframework.beans.factory.config.BeanPostProcessor that
handles
org.springframework.scripting.ScriptFactory definitions,
replacing each factory with the actual scripted Java object generated by it.
This is similar to the
org.springframework.beans.factory.FactoryBean mechanism, but is
specifically tailored for scripts and not built into Spring's core
container itself but rather implemented as an extension.
NOTE: The most important characteristic of this post-processor
is that constructor arguments are applied to the
org.springframework.scripting.ScriptFactory instance
while bean property values are applied to the generated scripted object.
Typically, constructor arguments include a script source locator and
potentially script interfaces, while bean property values include
references and config values to inject into the scripted object itself.
The following
ScriptFactoryPostProcessor will automatically
be applied to the two
org.springframework.scripting.ScriptFactory definitions below.
At runtime, the actual scripted objects will be exposed for
"bshMessenger" and "groovyMessenger", rather than the
org.springframework.scripting.ScriptFactory instances. Both of
those are supposed to be castable to the example's Messenger
interfaces here.
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/>
<bean id="bshMessenger" class="org.springframework.scripting.bsh.BshScriptFactory">
<constructor-arg value="classpath:mypackage/Messenger.bsh"/>
<constructor-arg value="mypackage.Messenger"/>
<property name="message" value="Hello World!"/>
</bean>
<bean id="groovyMessenger" class="org.springframework.scripting.bsh.GroovyScriptFactory">
<constructor-arg value="classpath:mypackage/Messenger.groovy"/>
<property name="message" value="Hello World!"/>
</bean>
NOTE: Please note that the above excerpt from a Spring
XML bean definition file uses just the <bean/>-style syntax
(in an effort to illustrate using the
ScriptFactoryPostProcessor itself).
In reality, you would never create a <bean/> definition for a
ScriptFactoryPostProcessor explicitly; rather you would import the
tags from the 'lang' namespace and simply create scripted
beans using the tags in that namespace... as part of doing so, a
ScriptFactoryPostProcessor will implicitly be created for you.
The Spring reference documentation contains numerous examples of using
tags in the 'lang' namespace; by way of an example, find below
a Groovy-backed bean defined using the 'lang:groovy' tag.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang">
<!-- this is the bean definition for the Groovy-backed Messenger implementation -->
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy">
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
<!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger -->
<bean id="bookingService" class="x.y.DefaultBookingService">
<property name="messenger" ref="messenger" />
</bean>
</beans>
author: Juergen Hoeller author: Rob Harrop author: Rick Evans author: Mark Fisher since: 2.0 |
Method Summary | |
protected ScriptSource | convertToScriptSource(String scriptSourceLocator, ResourceLoader resourceLoader) Convert the given script source locator to a ScriptSource instance. | protected Class | createCompositeInterface(Class[] interfaces) Create a composite interface Class for the given interfaces,
implementing the given interfaces in one single Class. | protected Class | createConfigInterface(BeanDefinition bd, Class[] interfaces) Create a config interface for the given bean definition, defining setter
methods for the defined property values as well as an init method and
a destroy method (if defined). | protected Object | createRefreshableProxy(TargetSource ts, Class[] interfaces) Create a refreshable proxy for the given AOP TargetSource. | protected BeanDefinition | createScriptFactoryBeanDefinition(BeanDefinition bd) Create a ScriptFactory bean definition based on the given script definition,
extracting only the definition data that is relevant for the ScriptFactory
(that is, only bean class and constructor arguments). | protected BeanDefinition | createScriptedObjectBeanDefinition(BeanDefinition bd, String scriptFactoryBeanName, ScriptSource scriptSource, Class[] interfaces) Create a bean definition for the scripted object, based on the given script
definition, extracting the definition data that is relevant for the scripted
object (that is, everything but bean class and constructor arguments). | public void | destroy() Destroy the inner bean factory (used for scripts) on shutdown. | public int | getOrder() | protected ScriptSource | getScriptSource(String beanName, String scriptSourceLocator) Obtain a ScriptSource for the given bean, lazily creating it
if not cached already. | public Object | postProcessBeforeInstantiation(Class beanClass, String beanName) | public Class | predictBeanType(Class beanClass, String beanName) | protected void | prepareScriptBeans(BeanDefinition bd, String scriptFactoryBeanName, String scriptedObjectBeanName) Prepare the script beans in the internal BeanFactory that this
post-processor uses. | protected long | resolveRefreshCheckDelay(BeanDefinition beanDefinition) Get the refresh check delay for the given
ScriptFactory
BeanDefinition .
If the
BeanDefinition has a
org.springframework.core.AttributeAccessor metadata attribute under the key
ScriptFactoryPostProcessor.REFRESH_CHECK_DELAY_ATTRIBUTE which is a valid
Number type, then this value is used. | public void | setBeanClassLoader(ClassLoader classLoader) | public void | setBeanFactory(BeanFactory beanFactory) | public void | setDefaultRefreshCheckDelay(long defaultRefreshCheckDelay) Set the delay between refresh checks, in milliseconds. | public void | setResourceLoader(ResourceLoader resourceLoader) |
INLINE_SCRIPT_PREFIX | final public static String INLINE_SCRIPT_PREFIX(Code) | | The
org.springframework.core.io.Resource -style prefix that denotes
an inline script.
An inline script is a script that is defined right there in the (typically XML)
configuration, as opposed to being defined in an external file.
|
REFRESH_CHECK_DELAY_ATTRIBUTE | final public static String REFRESH_CHECK_DELAY_ATTRIBUTE(Code) | | |
logger | final protected Log logger(Code) | | Logger available to subclasses
|
convertToScriptSource | protected ScriptSource convertToScriptSource(String scriptSourceLocator, ResourceLoader resourceLoader)(Code) | | Convert the given script source locator to a ScriptSource instance.
By default, supported locators are Spring resource locations
(such as "file:C:/myScript.bsh" or "classpath:myPackage/myScript.bsh")
and inline scripts ("inline:myScriptText...").
Parameters: scriptSourceLocator - the script source locator Parameters: resourceLoader - the ResourceLoader to use (if necessary) the ScriptSource instance |
createCompositeInterface | protected Class createCompositeInterface(Class[] interfaces)(Code) | | Create a composite interface Class for the given interfaces,
implementing the given interfaces in one single Class.
The default implementation builds a JDK proxy class
for the given interfaces.
Parameters: interfaces - the interfaces to merge the merged interface as Class See Also: java.lang.reflect.Proxy.getProxyClass |
createConfigInterface | protected Class createConfigInterface(BeanDefinition bd, Class[] interfaces)(Code) | | Create a config interface for the given bean definition, defining setter
methods for the defined property values as well as an init method and
a destroy method (if defined).
This implementation creates the interface via CGLIB's InterfaceMaker,
determining the property types from the given interfaces (as far as possible).
Parameters: bd - the bean definition (property values etc) to create aconfig interface for Parameters: interfaces - the interfaces to check against (might definegetters corresponding to the setters we're supposed to generate) the config interface See Also: net.sf.cglib.proxy.InterfaceMaker See Also: org.springframework.beans.BeanUtils.findPropertyType |
createRefreshableProxy | protected Object createRefreshableProxy(TargetSource ts, Class[] interfaces)(Code) | | Create a refreshable proxy for the given AOP TargetSource.
Parameters: ts - the refreshable TargetSource Parameters: interfaces - the proxy interfaces (may be null toindicate proxying of all interfaces implemented by the target class) the generated proxy See Also: RefreshableScriptTargetSource |
createScriptFactoryBeanDefinition | protected BeanDefinition createScriptFactoryBeanDefinition(BeanDefinition bd)(Code) | | Create a ScriptFactory bean definition based on the given script definition,
extracting only the definition data that is relevant for the ScriptFactory
(that is, only bean class and constructor arguments).
Parameters: bd - the full script bean definition the extracted ScriptFactory bean definition See Also: org.springframework.scripting.ScriptFactory |
createScriptedObjectBeanDefinition | protected BeanDefinition createScriptedObjectBeanDefinition(BeanDefinition bd, String scriptFactoryBeanName, ScriptSource scriptSource, Class[] interfaces)(Code) | | Create a bean definition for the scripted object, based on the given script
definition, extracting the definition data that is relevant for the scripted
object (that is, everything but bean class and constructor arguments).
Parameters: bd - the full script bean definition Parameters: scriptFactoryBeanName - the name of the internal ScriptFactory bean Parameters: scriptSource - the ScriptSource for the scripted bean Parameters: interfaces - the interfaces that the scripted bean is supposed to implement the extracted ScriptFactory bean definition See Also: org.springframework.scripting.ScriptFactory.getScriptedObject |
destroy | public void destroy()(Code) | | Destroy the inner bean factory (used for scripts) on shutdown.
|
getOrder | public int getOrder()(Code) | | |
getScriptSource | protected ScriptSource getScriptSource(String beanName, String scriptSourceLocator)(Code) | | Obtain a ScriptSource for the given bean, lazily creating it
if not cached already.
Parameters: beanName - the name of the scripted bean Parameters: scriptSourceLocator - the script source locator associated with the bean the corresponding ScriptSource instance See Also: ScriptFactoryPostProcessor.convertToScriptSource |
prepareScriptBeans | protected void prepareScriptBeans(BeanDefinition bd, String scriptFactoryBeanName, String scriptedObjectBeanName)(Code) | | Prepare the script beans in the internal BeanFactory that this
post-processor uses. Each original bean definition will be split
into a ScriptFactory definition and a scripted object definition.
Parameters: bd - the original bean definition in the main BeanFactory Parameters: scriptFactoryBeanName - the name of the internal ScriptFactory bean Parameters: scriptedObjectBeanName - the name of the internal scripted object bean |
|
|