public class GenericGroovyApplicationContext extends GenericApplicationContext
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.
GroovyBeanDefinitionReader
DefaultResourceLoader.ClassPathContextResource
Modifier and Type | Field and Description |
---|---|
private BeanWrapper |
contextWrapper |
private MetaClass |
metaClass |
private GroovyBeanDefinitionReader |
reader |
APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME
CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME
FACTORY_BEAN_PREFIX
CLASSPATH_ALL_URL_PREFIX
CLASSPATH_URL_PREFIX
Constructor and Description |
---|
GenericGroovyApplicationContext()
|
GenericGroovyApplicationContext(java.lang.Class<?> relativeClass,
java.lang.String... resourceNames)
Create a new GenericGroovyApplicationContext, loading bean definitions
from the given resource locations and automatically refreshing the context.
|
GenericGroovyApplicationContext(Resource... resources)
Create a new GenericGroovyApplicationContext, loading bean definitions
from the given resources and automatically refreshing the context.
|
GenericGroovyApplicationContext(java.lang.String... resourceLocations)
Create a new GenericGroovyApplicationContext, loading bean definitions
from the given resource locations and automatically refreshing the context.
|
Modifier and Type | Method and Description |
---|---|
MetaClass |
getMetaClass() |
java.lang.Object |
getProperty(java.lang.String property) |
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. |
java.lang.Object |
invokeMethod(java.lang.String name,
java.lang.Object args) |
void |
load(java.lang.Class<?> relativeClass,
java.lang.String... resourceNames)
Load bean definitions from the given Groovy scripts or XML files.
|
void |
load(Resource... resources)
Load bean definitions from the given Groovy scripts or XML files.
|
void |
load(java.lang.String... resourceLocations)
Load bean definitions from the given Groovy scripts or XML files.
|
void |
setEnvironment(ConfigurableEnvironment environment)
Delegates the given environment to underlying
GroovyBeanDefinitionReader . |
void |
setMetaClass(MetaClass metaClass) |
void |
setProperty(java.lang.String property,
java.lang.Object newValue) |
cancelRefresh, closeBeanFactory, getAutowireCapableBeanFactory, getBeanDefinition, getBeanFactory, getClassLoader, getDefaultListableBeanFactory, getResource, getResources, isAlias, isBeanNameInUse, refreshBeanFactory, registerAlias, registerBean, registerBean, registerBean, registerBean, registerBean, registerBean, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences, setClassLoader, setParent, setResourceLoader
addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroy, destroyBeans, doClose, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationEventMulticaster, getApplicationListeners, getApplicationName, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getLifecycleProcessor, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, resetCommonCaches, setDisplayName, setId, start, stop, toString
addProtocolResolver, clearResourceCaches, getProtocolResolvers, getResourceByPath, getResourceCache
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames
getAliases
addProtocolResolver
private final GroovyBeanDefinitionReader reader
private final BeanWrapper contextWrapper
private MetaClass metaClass
public GenericGroovyApplicationContext()
public GenericGroovyApplicationContext(Resource... resources)
resources
- the resources to load frompublic GenericGroovyApplicationContext(java.lang.String... resourceLocations)
resourceLocations
- the resources to load frompublic GenericGroovyApplicationContext(java.lang.Class<?> relativeClass, java.lang.String... resourceNames)
relativeClass
- class whose package will be used as a prefix when
loading each specified resource nameresourceNames
- relatively-qualified names of resources to loadpublic final GroovyBeanDefinitionReader getReader()
GroovyBeanDefinitionReader
for convenient access
to the loadBeanDefinition
methods on it as well as the ability
to specify an inline Groovy bean definition closure.public void setEnvironment(ConfigurableEnvironment environment)
GroovyBeanDefinitionReader
.
Should be called before any call to #load
.setEnvironment
in interface ConfigurableApplicationContext
setEnvironment
in class AbstractApplicationContext
environment
- the new environmentAbstractApplicationContext.createEnvironment()
public void load(Resource... resources)
Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.
resources
- one or more resources to load frompublic void load(java.lang.String... resourceLocations)
Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.
resourceLocations
- one or more resource locations to load frompublic void load(java.lang.Class<?> relativeClass, java.lang.String... resourceNames)
Note that ".xml" files will be parsed as XML content; all other kinds of resources will be parsed as Groovy scripts.
relativeClass
- class whose package will be used as a prefix when
loading each specified resource nameresourceNames
- relatively-qualified names of resources to loadpublic void setMetaClass(MetaClass metaClass)
public MetaClass getMetaClass()
public java.lang.Object invokeMethod(java.lang.String name, java.lang.Object args)
public void setProperty(java.lang.String property, java.lang.Object newValue)
@Nullable public java.lang.Object getProperty(java.lang.String property)