Package org.springframework.context.support

# Class GenericGroovyApplicationContext

java.lang.Object
org.springframework.core.io.DefaultResourceLoader
org.springframework.context.support.AbstractApplicationContext
org.springframework.context.support.GenericApplicationContext
org.springframework.context.support.GenericGroovyApplicationContext

All Implemented Interfaces:
  `groovy.lang.GroovyObject`, `Closeable`, `AutoCloseable`, `org.springframework.beans.factory.BeanFactory`, `org.springframework.beans.factory.HierarchicalBeanFactory`, `org.springframework.beans.factory.ListableBeanFactory`, `org.springframework.beans.factory.support.BeanDefinitionRegistry`, `ApplicationContext`, `ApplicationEventPublisher`, `ConfigurableApplicationContext`, `Lifecycle`, `MessageSource`, `org.springframework.core.AliasRegistry`, `org.springframework.core.env.EnvironmentCapable`, `org.springframework.core.io.ResourceLoader`, `org.springframework.core.io.support.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:
  - `GroovyBeanDefinitionReader`

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.core.io.DefaultResourceLoader

`org.springframework.core.io.DefaultResourceLoader.ClassPathContextResource`

## Field Summary

### Fields inherited from class org.springframework.context.support.AbstractApplicationContext

`APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME`

### Fields inherited from interface org.springframework.beans.factory.BeanFactory

`FACTORY_BEAN_PREFIX, FACTORY_BEAN_PREFIX_CHAR`

### Fields inherited from interface org.springframework.context.ConfigurableApplicationContext

`APPLICATION_STARTUP_BEAN_NAME, BOOTSTRAP_EXECUTOR_BEAN_NAME, CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME`

### Fields inherited from interface org.springframework.core.io.ResourceLoader

`CLASSPATH_URL_PREFIX`

### Fields inherited from interface org.springframework.core.io.support.ResourcePatternResolver

`CLASSPATH_ALL_URL_PREFIX`

## Constructor Summary

Constructors
Constructor
Description
`GenericGroovyApplicationContext()`
Create a new GenericGroovyApplicationContext that needs to be `loaded` and then manually `refreshed`.
`GenericGroovyApplicationContext(Class<?> relativeClass, String... resourceNames)`
Create a new GenericGroovyApplicationContext, loading bean definitions from the given resource locations and automatically refreshing the context.
`GenericGroovyApplicationContext(String... resourceLocations)`
Create a new GenericGroovyApplicationContext, loading bean definitions from the given resource locations and automatically refreshing the context.
`GenericGroovyApplicationContext(org.springframework.core.io.Resource... resources)`
Create a new GenericGroovyApplicationContext, loading bean definitions from the given resources and automatically refreshing the context.

## Method Summary

Modifier and Type
Method
Description
`groovy.lang.MetaClass`
`getMetaClass()`
`Object`
`getProperty(String property)`
`final org.springframework.beans.factory.groovy.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.
`Object`
`invokeMethod(String name, Object args)`
`void`
`load(Class<?> relativeClass, String... resourceNames)`
Load bean definitions from the given Groovy scripts or XML files.
`void`
`load(String... resourceLocations)`
Load bean definitions from the given Groovy scripts or XML files.
`void`
`load(org.springframework.core.io.Resource... resources)`
Load bean definitions from the given Groovy scripts or XML files.
`void`
`setEnvironment(org.springframework.core.env.ConfigurableEnvironment environment)`
Delegates the given environment to underlying `GroovyBeanDefinitionReader`.
`void`
`setMetaClass(groovy.lang.MetaClass metaClass)`
`void`
`setProperty(String property, Object newValue)`

### Methods inherited from class org.springframework.context.support.GenericApplicationContext

`cancelRefresh, closeBeanFactory, getAutowireCapableBeanFactory, getBeanDefinition, getBeanFactory, getClassLoader, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanDefinitionOverridable, isBeanNameInUse, refreshBeanFactory, refreshForAotProcessing, registerAlias, registerBean, registerBean, registerBean, registerBean, registerBean, registerBean, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setApplicationStartup, setClassLoader, setParent, setResourceLoader`

### Methods inherited from class org.springframework.context.support.AbstractApplicationContext

`addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, clearResourceCaches, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroyBeans, doClose, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationName, getApplicationStartup, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isClosed, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, removeApplicationListener, resetCommonCaches, setDisplayName, setId, start, stop, toString`

### Methods inherited from class org.springframework.core.io.DefaultResourceLoader

`addProtocolResolver, getProtocolResolvers, getResourceByPath, getResourceCache`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface org.springframework.core.AliasRegistry

`getAliases`

### Methods inherited from interface org.springframework.beans.factory.support.BeanDefinitionRegistry

`containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames`

### Methods inherited from interface org.springframework.context.ConfigurableApplicationContext

`addProtocolResolver`

## Constructor Details

### GenericGroovyApplicationContext

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

### GenericGroovyApplicationContext

public GenericGroovyApplicationContext(org.springframework.core.io.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

## Method Details

### getReader

public final org.springframework.beans.factory.groovy.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:
  - `AbstractBeanDefinitionReader.loadBeanDefinitions(org.springframework.core.io.Resource...)`
  - `AbstractBeanDefinitionReader.loadBeanDefinitions(String...)`

### setEnvironment

public void setEnvironment(org.springframework.core.env.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:
  - `AbstractApplicationContext.createEnvironment()`

### load

public void load(org.springframework.core.io.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

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

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

public void setMetaClass(groovy.lang.MetaClass metaClass)

Specified by:
  `setMetaClass` in interface `groovy.lang.GroovyObject`

### getMetaClass

public groovy.lang.MetaClass getMetaClass()

Specified by:
  `getMetaClass` in interface `groovy.lang.GroovyObject`

### invokeMethod

public Object invokeMethod(String name, Object args)

Specified by:
  `invokeMethod` in interface `groovy.lang.GroovyObject`

### setProperty

public void setProperty(String property, Object newValue)

Specified by:
  `setProperty` in interface `groovy.lang.GroovyObject`

### getProperty

@Nullable public Object getProperty(String property)

Specified by:
  `getProperty` in interface `groovy.lang.GroovyObject`