Class GenericGroovyApplicationContext

All Implemented Interfaces:
groovy.lang.GroovyObject, Closeable, AutoCloseable, BeanFactory, 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 (for example, 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:
  • Constructor Details Link icon

    • GenericGroovyApplicationContext Link icon

      public GenericGroovyApplicationContext()
      Create a new GenericGroovyApplicationContext that needs to be loaded and then manually refreshed.
    • GenericGroovyApplicationContext Link icon

      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 Link icon

      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 Link icon

      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
  • Method Details Link icon

    • getReader Link icon

      public final GroovyBeanDefinitionReader getReader()
      Exposes the underlying GroovyBeanDefinitionReader for convenient access to the loadBeanDefinition methods on it as well as the ability to specify an inline Groovy bean definition closure.
      See Also:
    • setEnvironment Link icon

      public void setEnvironment(ConfigurableEnvironment environment)
      Delegates the given environment to underlying GroovyBeanDefinitionReader. Should be called before any call to #load.
      Specified by:
      setEnvironment in interface ConfigurableApplicationContext
      Overrides:
      setEnvironment in class AbstractApplicationContext
      Parameters:
      environment - the new environment
      See Also:
    • load Link icon

      public void load(Resource... resources)
      Load bean definitions from the given Groovy scripts or XML files.

      Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.

      Parameters:
      resources - one or more resources to load from
    • load Link icon

      public void load(String... resourceLocations)
      Load bean definitions from the given Groovy scripts or XML files.

      Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.

      Parameters:
      resourceLocations - one or more resource locations to load from
    • load Link icon

      public void load(Class<?> relativeClass, String... resourceNames)
      Load bean definitions from the given Groovy scripts or XML files.

      Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.

      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
    • setMetaClass Link icon

      public void setMetaClass(groovy.lang.MetaClass metaClass)
      Specified by:
      setMetaClass in interface groovy.lang.GroovyObject
    • getMetaClass Link icon

      public groovy.lang.MetaClass getMetaClass()
      Specified by:
      getMetaClass in interface groovy.lang.GroovyObject
    • invokeMethod Link icon

      public Object invokeMethod(String name, Object args)
      Specified by:
      invokeMethod in interface groovy.lang.GroovyObject
    • setProperty Link icon

      public void setProperty(String property, Object newValue)
      Specified by:
      setProperty in interface groovy.lang.GroovyObject
    • getProperty Link icon

      public @Nullable Object getProperty(String property)
      Specified by:
      getProperty in interface groovy.lang.GroovyObject