Class GenericGroovyApplicationContext

  • All Implemented Interfaces:
    groovy.lang.GroovyObject, Closeable, AutoCloseable, BeanFactory, DisposableBean, HierarchicalBeanFactory, ListableBeanFactory, BeanDefinitionRegistry, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, AliasRegistry, EnvironmentCapable, ResourceLoader, ResourcePatternResolver

    public class GenericGroovyApplicationContext
    extends GenericApplicationContext
    implements groovy.lang.GroovyObject
    An ApplicationContext implementation that extends GenericApplicationContext and implements GroovyObject such that beans can be retrieved with the dot de-reference syntax instead of using AbstractApplicationContext.getBean(java.lang.String).

    Consider this as the equivalent of GenericXmlApplicationContext for Groovy bean definitions, or even an upgrade thereof since it seamlessly understands XML bean definition files as well. The main difference is that, within a Groovy script, the context can be used with an inline bean definition closure as follows:

     import org.hibernate.SessionFactory
     import org.apache.commons.dbcp.BasicDataSource
    
     def context = new GenericGroovyApplicationContext()
     context.reader.beans {
         dataSource(BasicDataSource) {                  // <--- invokeMethod
             driverClassName = "org.hsqldb.jdbcDriver"
             url = "jdbc:hsqldb:mem:grailsDB"
             username = "sa"                            // <-- setProperty
             password = ""
             settings = [mynew:"setting"]
         }
         sessionFactory(SessionFactory) {
             dataSource = dataSource                    // <-- getProperty for retrieving references
         }
         myService(MyService) {
             nestedBean = { AnotherBean bean ->         // <-- setProperty with closure for nested bean
                 dataSource = dataSource
             }
         }
     }
     context.refresh()
     

    Alternatively, load a Groovy bean definition script like the following from an external resource (e.g. an "applicationContext.groovy" file):

     import org.hibernate.SessionFactory
     import org.apache.commons.dbcp.BasicDataSource
    
     beans {
         dataSource(BasicDataSource) {
             driverClassName = "org.hsqldb.jdbcDriver"
             url = "jdbc:hsqldb:mem:grailsDB"
             username = "sa"
             password = ""
             settings = [mynew:"setting"]
         }
         sessionFactory(SessionFactory) {
             dataSource = dataSource
         }
         myService(MyService) {
             nestedBean = { AnotherBean bean ->
                 dataSource = dataSource
             }
         }
     }
     

    With the following Java code creating the GenericGroovyApplicationContext (potentially using Ant-style '*'/'**' location patterns):

     GenericGroovyApplicationContext context = new GenericGroovyApplicationContext();
     context.load("org/myapp/applicationContext.groovy");
     context.refresh();
     

    Or even more concise, provided that no extra configuration is needed:

     ApplicationContext context = new GenericGroovyApplicationContext("org/myapp/applicationContext.groovy");
     

    This application context also understands XML bean definition files, allowing for seamless mixing and matching with Groovy bean definition files. ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.

    Since:
    4.0
    Author:
    Juergen Hoeller, Jeff Brown
    See Also:
    GroovyBeanDefinitionReader
    • Constructor Detail

      • GenericGroovyApplicationContext

        public GenericGroovyApplicationContext​(Resource... resources)
        Create a new GenericGroovyApplicationContext, loading bean definitions from the given resources and automatically refreshing the context.
        Parameters:
        resources - the resources to load from
      • GenericGroovyApplicationContext

        public GenericGroovyApplicationContext​(String... resourceLocations)
        Create a new GenericGroovyApplicationContext, loading bean definitions from the given resource locations and automatically refreshing the context.
        Parameters:
        resourceLocations - the resources to load from
      • GenericGroovyApplicationContext

        public GenericGroovyApplicationContext​(Class<?> relativeClass,
                                               String... resourceNames)
        Create a new GenericGroovyApplicationContext, loading bean definitions from the given resource locations and automatically refreshing the context.
        Parameters:
        relativeClass - class whose package will be used as a prefix when loading each specified resource name
        resourceNames - relatively-qualified names of resources to load