Groovy Documentation

grails.spring
[Java] Class BeanBuilder

java.lang.Object
  groovy.lang.GroovyObjectSupport
      grails.spring.BeanBuilder

public class BeanBuilder
extends groovy.lang.GroovyObjectSupport

Runtime bean configuration wrapper. Like a Groovy builder, but more of a DSL for Spring configuration. Allows syntax like:

 import org.hibernate.SessionFactory
 import org.apache.commons.dbcp.BasicDataSource

 BeanBuilder builder = new BeanBuilder()
 builder.beans {
   dataSource(BasicDataSource) {                  // <--- invokeMethod
      driverClassName = "org.h2.Driver"
      url = "jdbc:h2:mem:grailsDB"
      username = "sa"                            // <-- setProperty
      password = ""
      settings = [mynew:"setting"]
  }
  sessionFactory(SessionFactory) {
         dataSource = dataSource                 // <-- getProperty for retrieving refs
  }
  myService(MyService) {
      nestedBean = { AnotherBean bean->          // <-- setProperty with closure for nested bean
              dataSource = dataSource
      }
  }
 }
 

You can also use the Spring IO API to load resources containing beans defined as a Groovy script using either the constructors or the loadBeans(Resource[] resources) method

Authors:
Graeme Rocher
Since:
0.4


Constructor Summary
BeanBuilder()

BeanBuilder(java.lang.ClassLoader classLoader)

BeanBuilder(org.springframework.context.ApplicationContext parent)

BeanBuilder(org.springframework.context.ApplicationContext parent, java.lang.ClassLoader classLoader)

BeanBuilder(org.springframework.context.ApplicationContext parentCtx, RuntimeSpringConfiguration springConfig, java.lang.ClassLoader classLoader)

 
Method Summary
protected boolean addToDeferred(BeanConfiguration beanConfig, java.lang.String property, java.lang.Object newValue)

org.springframework.beans.factory.support.AbstractBeanDefinition bean(java.lang.Class type)

org.springframework.beans.factory.support.AbstractBeanDefinition bean(java.lang.Class type, java.lang.Object... args)

BeanBuilder beans(groovy.lang.Closure c)

Defines a set of beans for the given block or closure.

org.springframework.context.ApplicationContext createApplicationContext()

Creates an ApplicationContext from the current state of the BeanBuilder

protected DynamicElementReader createDynamicElementReader(java.lang.String namespace, boolean decorator)

protected RuntimeSpringConfiguration createRuntimeSpringConfiguration(org.springframework.context.ApplicationContext parent, java.lang.ClassLoader cl)

protected void filterGStringReferences(java.lang.Object[] constructorArgs)

protected void finalizeDeferredProperties()

org.springframework.beans.factory.config.BeanDefinition getBeanDefinition(java.lang.String name)

Retrieves a BeanDefinition for the given name

java.util.Map getBeanDefinitions()

Retrieves all BeanDefinitions for this BeanBuilder

org.apache.commons.logging.Log getLog()

org.springframework.context.ApplicationContext getParentCtx()

Retrieves the parent ApplicationContext

java.lang.Object getProperty(java.lang.String name)

Overrides property retrieval in the scope of the BeanBuilder to either:

RuntimeSpringConfiguration getSpringConfig()

Retrieves the RuntimeSpringConfiguration instance used the the BeanBuilder

void importBeans(java.lang.String resourcePattern)

Imports Spring bean definitions from either XML or Groovy sources into the current bean builder instance

protected void initializeBeanBuilderForClassLoader(java.lang.ClassLoader classLoader)

protected void initializeSpringConfig()

protected BeanBuilder invokeBeanDefiningClosure(groovy.lang.Closure callable)

When an method's argument is only a closure it is a set of bean definitions.

protected BeanConfiguration invokeBeanDefiningMethod(java.lang.String name, java.lang.Object[] args)

Called when a bean definition node is called.

java.lang.Object invokeMethod(java.lang.String name, java.lang.Object arg)

Overrides method invocation to create beans for each method name that takes a class argument.

void loadBeans(java.lang.String resourcePattern)

Takes a resource pattern as (@see org.springframework.core.io.support.PathMatchingResourcePatternResolver) This allows you load multiple bean resources in this single builder

void loadBeans(org.springframework.core.io.Resource resource)

Loads a single Resource into the bean builder

void loadBeans(org.springframework.core.io.Resource[] resources)

Loads a set of given beans

protected java.lang.Object manageListIfNecessary(java.lang.Object value)

Checks whether there are any runtime refs inside the list and converts it to a ManagedList if necessary.

protected java.lang.Object manageMapIfNecessary(java.lang.Object value)

Checks whether there are any runtime refs inside a Map and converts it to a ManagedMap if necessary.

void registerBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)

Register a set of beans with the given bean registry.

void registerBeans(RuntimeSpringConfiguration targetSpringConfig)

Registers bean definitions with another instance of RuntimeSpringConfiguration, overriding any beans in the target.

protected java.util.List resolveConstructorArguments(java.lang.Object[] args, int start, int end)

void setBinding(groovy.lang.Binding b)

Sets the binding (the variables available in the scope of the BeanBuilder).

void setClassLoader(java.lang.ClassLoader classLoader)

void setNamespaceHandlerResolver(org.springframework.beans.factory.xml.NamespaceHandlerResolver namespaceHandlerResolver)

void setProperty(java.lang.String name, java.lang.Object value)

Overrides property setting in the scope of the BeanBuilder to set properties on the current BeanConfiguration.

protected void setPropertyOnBeanConfig(java.lang.String name, java.lang.Object value)

void setResourcePatternResolver(org.springframework.core.io.support.ResourcePatternResolver resourcePatternResolver)

void setSpringConfig(RuntimeSpringConfiguration springConfig)

Sets the runtime Spring configuration instance to use.

protected java.lang.Object[] subarray(java.lang.Object[] args, int i, int j)

void xmlns(java.util.Map definition)

Defines a Spring namespace definition to use.

 
Methods inherited from class groovy.lang.GroovyObjectSupport
groovy.lang.GroovyObjectSupport#setProperty(java.lang.String, java.lang.Object), groovy.lang.GroovyObjectSupport#getProperty(java.lang.String), groovy.lang.GroovyObjectSupport#getMetaClass(), groovy.lang.GroovyObjectSupport#setMetaClass(groovy.lang.MetaClass), groovy.lang.GroovyObjectSupport#invokeMethod(java.lang.String, java.lang.Object), groovy.lang.GroovyObjectSupport#wait(), groovy.lang.GroovyObjectSupport#wait(long), groovy.lang.GroovyObjectSupport#wait(long, int), groovy.lang.GroovyObjectSupport#equals(java.lang.Object), groovy.lang.GroovyObjectSupport#toString(), groovy.lang.GroovyObjectSupport#hashCode(), groovy.lang.GroovyObjectSupport#getClass(), groovy.lang.GroovyObjectSupport#notify(), groovy.lang.GroovyObjectSupport#notifyAll()
 
Methods inherited from class java.lang.Object
java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#wait(long, int), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
 

Constructor Detail

BeanBuilder

public BeanBuilder()


BeanBuilder

public BeanBuilder(java.lang.ClassLoader classLoader)


BeanBuilder

public BeanBuilder(org.springframework.context.ApplicationContext parent)


BeanBuilder

public BeanBuilder(org.springframework.context.ApplicationContext parent, java.lang.ClassLoader classLoader)


BeanBuilder

public BeanBuilder(org.springframework.context.ApplicationContext parentCtx, RuntimeSpringConfiguration springConfig, java.lang.ClassLoader classLoader)


 
Method Detail

addToDeferred

protected boolean addToDeferred(newValue) { BeanConfiguration beanConfig, java.lang.String property, java.lang.Object newValue)


bean

public org.springframework.beans.factory.support.AbstractBeanDefinition bean(java.lang.Class type)


bean

public org.springframework.beans.factory.support.AbstractBeanDefinition bean(java.lang.Class type, java.lang.Object... args)


beans

public BeanBuilder beans(groovy.lang.Closure c)
Defines a set of beans for the given block or closure.
Parameters:
c - The block or closure
Returns:
This BeanBuilder instance


createApplicationContext

public org.springframework.context.ApplicationContext createApplicationContext()
Creates an ApplicationContext from the current state of the BeanBuilder
Returns:
The ApplicationContext instance


createDynamicElementReader

protected DynamicElementReader createDynamicElementReader(java.lang.String namespace, boolean decorator)


createRuntimeSpringConfiguration

protected RuntimeSpringConfiguration createRuntimeSpringConfiguration(org.springframework.context.ApplicationContext parent, java.lang.ClassLoader cl)


filterGStringReferences

protected void filterGStringReferences(java.lang.Object[] constructorArgs)


finalizeDeferredProperties

protected void finalizeDeferredProperties()


getBeanDefinition

public org.springframework.beans.factory.config.BeanDefinition getBeanDefinition(java.lang.String name)
Retrieves a BeanDefinition for the given name
Parameters:
name - The bean definition
Returns:
The BeanDefinition instance


getBeanDefinitions

public java.util.Map getBeanDefinitions()
Retrieves all BeanDefinitions for this BeanBuilder
Returns:
A map of BeanDefinition instances with the bean id as the key


getLog

public org.apache.commons.logging.Log getLog()


getParentCtx

public org.springframework.context.ApplicationContext getParentCtx()
Retrieves the parent ApplicationContext
Returns:
The parent ApplicationContext


getProperty

}
public java.lang.Object getProperty(java.lang.String name)
Overrides property retrieval in the scope of the BeanBuilder to either: a) Retrieve a variable from the bean builder's binding if it exists b) Retrieve a RuntimeBeanReference for a specific bean if it exists c) Otherwise just delegate to super.getProperty which will resolve properties from the BeanBuilder itself


getSpringConfig

public RuntimeSpringConfiguration getSpringConfig()
Retrieves the RuntimeSpringConfiguration instance used the the BeanBuilder
Returns:
The RuntimeSpringConfiguration instance


importBeans

public void importBeans(java.lang.String resourcePattern)
Imports Spring bean definitions from either XML or Groovy sources into the current bean builder instance
Parameters:
resourcePattern - The resource pattern


initializeBeanBuilderForClassLoader

protected void initializeBeanBuilderForClassLoader(@SuppressWarnings("hiding") java.lang.ClassLoader classLoader)


initializeSpringConfig

protected void initializeSpringConfig()


invokeBeanDefiningClosure

protected BeanBuilder invokeBeanDefiningClosure(groovy.lang.Closure callable)
When an method's argument is only a closure it is a set of bean definitions.
Parameters:
callable - The closure argument
Returns:
This BeanBuilder instance


invokeBeanDefiningMethod

protected BeanConfiguration invokeBeanDefiningMethod(java.lang.String name, java.lang.Object[] args)
Called when a bean definition node is called.
Parameters:
name - The name of the bean to define
args - The arguments to the bean. The first argument is the class name, the last argument is sometimes a closure. All the arguments in between are constructor arguments
Returns:
The bean configuration instance


invokeMethod

@Override
public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object arg)
Overrides method invocation to create beans for each method name that takes a class argument.


loadBeans

public void loadBeans(java.lang.String resourcePattern)
Takes a resource pattern as (
throws:
IOException When the path cannot be matched
Parameters:
resourcePattern - The resource pattern
See Also:
org.springframework.core.io.support.PathMatchingResourcePatternResolver


loadBeans

public void loadBeans(org.springframework.core.io.Resource resource)
Loads a single Resource into the bean builder
Parameters:
resource - The resource to load


loadBeans

public void loadBeans(org.springframework.core.io.Resource[] resources)
Loads a set of given beans
throws:
IOException Thrown if there is an error reading one of the passes resources
Parameters:
resources - The resources to load


manageListIfNecessary

}
protected java.lang.Object manageListIfNecessary(java.lang.Object value)
Checks whether there are any runtime refs inside the list and converts it to a ManagedList if necessary.
Parameters:
value - The object that represents the list
Returns:
Either a new list or a managed one


manageMapIfNecessary

}
protected java.lang.Object manageMapIfNecessary(java.lang.Object value)
Checks whether there are any runtime refs inside a Map and converts it to a ManagedMap if necessary.
Parameters:
value - The current map
Returns:
A ManagedMap or a normal map


registerBeans

public void registerBeans(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
Register a set of beans with the given bean registry. Most application contexts are bean registries.


registerBeans

public void registerBeans(RuntimeSpringConfiguration targetSpringConfig)
Registers bean definitions with another instance of RuntimeSpringConfiguration, overriding any beans in the target.
Parameters:
targetSpringConfig - The RuntimeSpringConfiguration object


resolveConstructorArguments

constructorArgs[i] = manageMapIfNecessary(constructorArgs[i]);
protected java.util.List resolveConstructorArguments(java.lang.Object[] args, int start, int end)


setBinding

public void setBinding(groovy.lang.Binding b)
Sets the binding (the variables available in the scope of the BeanBuilder).
Parameters:
b - The Binding instance


setClassLoader

public void setClassLoader(java.lang.ClassLoader classLoader)


setNamespaceHandlerResolver

public void setNamespaceHandlerResolver(org.springframework.beans.factory.xml.NamespaceHandlerResolver namespaceHandlerResolver)


setProperty

*
public void setProperty(java.lang.String name, java.lang.Object value)
Overrides property setting in the scope of the BeanBuilder to set properties on the current BeanConfiguration.


setPropertyOnBeanConfig

protected void setPropertyOnBeanConfig(java.lang.String name, java.lang.Object value)


setResourcePatternResolver

public void setResourcePatternResolver(org.springframework.core.io.support.ResourcePatternResolver resourcePatternResolver)


setSpringConfig

public void setSpringConfig(RuntimeSpringConfiguration springConfig)
Sets the runtime Spring configuration instance to use. This is not necessary to set and is configured to default value if not, but is useful for integrating with other spring configuration mechanisms
Parameters:
springConfig - The spring config
See Also:
GrailsRuntimeConfigurator


subarray

protected java.lang.Object[] subarray(java.lang.Object[] args, int i, int j)


xmlns

public void xmlns(java.util.Map definition)
Defines a Spring namespace definition to use.
Parameters:
definition - The definition


 

Groovy Documentation