Package grails.spring

Class 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 Summary

      Constructors 
      Constructor Description
      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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected boolean addToDeferred​(BeanConfiguration beanConfig, java.lang.String property, java.lang.Object newValue)  
      org.springframework.beans.factory.support.AbstractBeanDefinition bean​(java.lang.Class<?> type)
      Defines an inner bean definition.
      org.springframework.beans.factory.support.AbstractBeanDefinition bean​(java.lang.Class type, java.lang.Object... args)
      Defines an inner bean definition.
      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 grails.spring.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<java.lang.String,​org.springframework.beans.factory.config.BeanDefinition> 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: 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
      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
      void importBeans​(org.springframework.core.io.Resource resource)  
      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 eg loadBeans("classpath:*Beans.groovy")
      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​(RuntimeSpringConfiguration targetSpringConfig)
      Registers bean definitions with another instance of RuntimeSpringConfiguration, overriding any beans in the target.
      void registerBeans​(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
      Register a set of beans with the given bean registry.
      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<java.lang.String,​java.lang.String> definition)
      Defines a Spring namespace definition to use.
      • Methods inherited from class groovy.lang.GroovyObjectSupport

        getMetaClass, setMetaClass
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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

      • setResourcePatternResolver

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

        protected void initializeSpringConfig()
      • setClassLoader

        public void setClassLoader​(java.lang.ClassLoader classLoader)
      • initializeBeanBuilderForClassLoader

        protected void initializeBeanBuilderForClassLoader​(java.lang.ClassLoader classLoader)
      • setNamespaceHandlerResolver

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

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

        public org.apache.commons.logging.Log getLog()
      • 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
      • importBeans

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

        public void xmlns​(java.util.Map<java.lang.String,​java.lang.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​(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<java.lang.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​(java.lang.String resourcePattern)
                       throws java.io.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:
        java.io.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:
        java.io.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 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.
      • 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,
                                        java.lang.String property,
                                        java.lang.Object newValue)
      • 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
      • resolveConstructorArguments

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

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

        protected void filterGStringReferences​(java.lang.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​(java.lang.String name,
                                java.lang.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​(java.lang.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​(java.lang.Class type,
                                                                                     java.lang.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​(java.lang.String name,
                                               java.lang.Object value)
      • 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
      • 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
      • 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
      • createDynamicElementReader

        protected grails.spring.DynamicElementReader createDynamicElementReader​(java.lang.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