Package grails.spring

Class BeanBuilder

java.lang.Object
groovy.lang.GroovyObjectSupport
grails.spring.BeanBuilder
All Implemented Interfaces:
groovy.lang.GroovyObject

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.tomcat.jdbc.pool.DataSource

 BeanBuilder builder = new BeanBuilder()
 builder.beans {
   dataSource(DataSource) {                      // 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

Since:
0.4
  • Constructor Details

    • BeanBuilder

      public BeanBuilder()
    • BeanBuilder

      public BeanBuilder(ClassLoader classLoader)
    • BeanBuilder

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

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

      public BeanBuilder(org.springframework.context.ApplicationContext parentCtx, RuntimeSpringConfiguration springConfig, ClassLoader classLoader)
  • Method Details

    • setResourcePatternResolver

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

      protected void initializeSpringConfig()
    • setClassLoader

      public void setClassLoader(ClassLoader classLoader)
    • initializeBeanBuilderForClassLoader

      protected void initializeBeanBuilderForClassLoader(ClassLoader classLoader)
    • setNamespaceHandlerResolver

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

      protected RuntimeSpringConfiguration createRuntimeSpringConfiguration(org.springframework.context.ApplicationContext parent, ClassLoader cl)
    • getLog

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

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

      public void importBeans(org.springframework.core.io.Resource resource)
    • xmlns

      public void xmlns(Map<String,String> definition)
      Defines a Spring namespace definition to use.
      Parameters:
      definition - The definition
    • getParentCtx

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

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

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

      public Map<String,org.springframework.beans.factory.config.BeanDefinition> getBeanDefinitions()
      Retrieves all BeanDefinitions for this BeanBuilder
      Returns:
      A map of BeanDefinition instances with the bean id as the key
    • 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 @see org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator
      Parameters:
      springConfig - The spring config
    • loadBeans

      public void loadBeans(String resourcePattern) throws IOException
      Takes a resource pattern as (@see org.springframework.core.io.support.PathMatchingResourcePatternResolver) This allows you load multiple bean resources in this single builder eg loadBeans("classpath:*Beans.groovy")
      Parameters:
      resourcePattern - The resource pattern
      Throws:
      IOException - When the path cannot be matched
    • 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
      Parameters:
      resources - The resources to load
      Throws:
      IOException - Thrown if there is an error reading one of the passes resources
    • 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
    • invokeMethod

      public Object invokeMethod(String name, Object arg)
      Overrides method invocation to create beans for each method name that takes a class argument.
    • 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
    • finalizeDeferredProperties

      protected void finalizeDeferredProperties()
    • addToDeferred

      protected boolean addToDeferred(BeanConfiguration beanConfig, String property, Object newValue)
    • invokeBeanDefiningMethod

      protected BeanConfiguration invokeBeanDefiningMethod(String name, 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
    • resolveConstructorArguments

      protected List resolveConstructorArguments(Object[] args, int start, int end)
    • subarray

      protected Object[] subarray(Object[] args, int i, int j)
    • filterGStringReferences

      protected void filterGStringReferences(Object[] constructorArgs)
    • 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
    • setProperty

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

      public org.springframework.beans.factory.support.AbstractBeanDefinition bean(Class<?> type)
      Defines an inner bean definition.
      Parameters:
      type - The bean type
      Returns:
      The bean definition
    • bean

      public org.springframework.beans.factory.support.AbstractBeanDefinition bean(Class type, Object... args)
      Defines an inner bean definition.
      Parameters:
      type - The bean type
      args - The constructors arguments and closure configurer
      Returns:
      The bean definition
    • setPropertyOnBeanConfig

      protected void setPropertyOnBeanConfig(String name, Object value)
    • manageMapIfNecessary

      protected Object manageMapIfNecessary(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
    • manageListIfNecessary

      protected Object manageListIfNecessary(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
    • getProperty

      public Object getProperty(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
    • createDynamicElementReader

      protected grails.spring.DynamicElementReader createDynamicElementReader(String namespace, boolean decorator)
    • 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