spring-framework / org.springframework.context.support / GenericGroovyApplicationContext

GenericGroovyApplicationContext

open class GenericGroovyApplicationContext : GenericApplicationContext, GroovyObject

An org.springframework.context.ApplicationContext implementation that extends GenericApplicationContext and implements GroovyObject such that beans can be retrieved with the dot de-reference syntax instead of using #getBean.

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.

Author
Juergen Hoeller

Author
Jeff Brown

Since
4.0

See Also
org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader

Constructors

<init>

GenericGroovyApplicationContext()

Create a new GenericGroovyApplicationContext that needs to be loaded and then manually refreshed.

GenericGroovyApplicationContext(vararg resources: Resource)

Create a new GenericGroovyApplicationContext, loading bean definitions from the given resources and automatically refreshing the context.

GenericGroovyApplicationContext(vararg resourceLocations: String)
GenericGroovyApplicationContext(relativeClass: Class<*>, vararg resourceNames: String)

Create a new GenericGroovyApplicationContext, loading bean definitions from the given resource locations and automatically refreshing the context.

Functions

getMetaClass

open fun getMetaClass(): MetaClass

getProperty

open fun getProperty(property: String): Any

getReader

fun getReader(): GroovyBeanDefinitionReader

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.

invokeMethod

open fun invokeMethod(name: String, args: Any): Any

load

open fun load(vararg resources: Resource): Unit
open fun load(vararg resourceLocations: String): Unit
open fun load(relativeClass: Class<*>, vararg resourceNames: String): Unit

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.

setEnvironment

open fun setEnvironment(environment: ConfigurableEnvironment): Unit

Delegates the given environment to underlying GroovyBeanDefinitionReader. Should be called before any call to #load.

setMetaClass

open fun setMetaClass(metaClass: MetaClass): Unit

setProperty

open fun setProperty(property: String, newValue: Any): Unit