diff --git a/spring-beans-groovy/src/main/groovy/org/springframework/beans/factory/groovy/GroovyDynamicElementReader.groovy b/spring-beans-groovy/src/main/groovy/org/springframework/beans/factory/groovy/GroovyDynamicElementReader.groovy index 0f1417af86a..8477609076c 100644 --- a/spring-beans-groovy/src/main/groovy/org/springframework/beans/factory/groovy/GroovyDynamicElementReader.groovy +++ b/spring-beans-groovy/src/main/groovy/org/springframework/beans/factory/groovy/GroovyDynamicElementReader.groovy @@ -45,53 +45,53 @@ class GroovyDynamicElementReader extends GroovyObjectSupport { private boolean callAfterInvocation = true - public GroovyDynamicElementReader(String namespace, Map namespaceMap, - BeanDefinitionParserDelegate delegate, GroovyBeanDefinitionWrapper beanDefinition, boolean decorating) { - super(); + public GroovyDynamicElementReader(String namespace, Map namespaceMap, + BeanDefinitionParserDelegate delegate, GroovyBeanDefinitionWrapper beanDefinition, boolean decorating) { + super(); this.rootNamespace = namespace - this.xmlNamespaces = namespaceMap - this.delegate = delegate + this.xmlNamespaces = namespaceMap + this.delegate = delegate this.beanDefinition = beanDefinition; this.decorating = decorating; - } + } - @Override - public Object invokeMethod(String name, Object args) { - if (name.equals("doCall")) { - def callable = args[0] - callable.resolveStrategy = Closure.DELEGATE_FIRST - callable.delegate = this - def result = callable.call() + @Override + public Object invokeMethod(String name, Object args) { + if (name.equals("doCall")) { + def callable = args[0] + callable.resolveStrategy = Closure.DELEGATE_FIRST + callable.delegate = this + def result = callable.call() if (this.callAfterInvocation) { afterInvocation() this.callAfterInvocation = false } - return result - } + return result + } - else { - StreamingMarkupBuilder builder = new StreamingMarkupBuilder(); + else { + StreamingMarkupBuilder builder = new StreamingMarkupBuilder(); def myNamespace = this.rootNamespace - def myNamespaces = this.xmlNamespaces - - def callable = { - for (namespace in myNamespaces) { - mkp.declareNamespace([(namespace.key):namespace.value]) - } - if (args && (args[-1] instanceof Closure)) { - args[-1].resolveStrategy = Closure.DELEGATE_FIRST - args[-1].delegate = builder - } - delegate."$myNamespace"."$name"(*args) - } - - callable.resolveStrategy = Closure.DELEGATE_FIRST - callable.delegate = builder - def writable = builder.bind(callable) - def sw = new StringWriter() - writable.writeTo(sw) + def myNamespaces = this.xmlNamespaces + + def callable = { + for (namespace in myNamespaces) { + mkp.declareNamespace([(namespace.key):namespace.value]) + } + if (args && (args[-1] instanceof Closure)) { + args[-1].resolveStrategy = Closure.DELEGATE_FIRST + args[-1].delegate = builder + } + delegate."$myNamespace"."$name"(*args) + } + + callable.resolveStrategy = Closure.DELEGATE_FIRST + callable.delegate = builder + def writable = builder.bind(callable) + def sw = new StringWriter() + writable.writeTo(sw) Element element = this.delegate.readerContext.readDocumentFromString(sw.toString()).documentElement this.delegate.initDefaults(element) @@ -106,13 +106,13 @@ class GroovyDynamicElementReader extends GroovyObjectSupport { this.beanDefinition.setBeanDefinition(beanDefinition) } } - if (this.callAfterInvocation) { - afterInvocation() + if (this.callAfterInvocation) { + afterInvocation() this.callAfterInvocation = false - } - return element - } - } + } + return element + } + } /** * Hook that subclass or anonymous classes can overwrite to implement custom behavior diff --git a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java index 69993933f12..aa7117c3c70 100644 --- a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java +++ b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java @@ -132,7 +132,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp private final Map namespaces = new HashMap(); - private final Map deferredProperties = new HashMap(); + private final Map deferredProperties = new HashMap(); /** @@ -140,11 +140,11 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * @param registry the BeanFactory to load bean definitions into, * in the form of a BeanDefinitionRegistry */ - public GroovyBeanDefinitionReader(BeanDefinitionRegistry registry) { - super(registry); - this.xmlBeanDefinitionReader = new XmlBeanDefinitionReader(registry); + public GroovyBeanDefinitionReader(BeanDefinitionRegistry registry) { + super(registry); + this.xmlBeanDefinitionReader = new XmlBeanDefinitionReader(registry); this.xmlBeanDefinitionReader.setValidating(false); - } + } /** * Create new GroovyBeanDefinitionReader based on the given XmlBeanDefinitionReader, @@ -182,7 +182,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } - // TRADITIONAL BEAN DEFINITION READER METHODS + // TRADITIONAL BEAN DEFINITION READER METHODS /** * Load bean definitions from the specified Groovy script. @@ -293,26 +293,26 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } /** - * Defines an Spring namespace definition to use. - * @param definition the namespace definition - */ - public void xmlns(Map definition) { - if (!definition.isEmpty()) { - for (Map.Entry entry : definition.entrySet()) { - String namespace = entry.getKey(); - String uri = entry.getValue(); - if (uri == null) { - throw new IllegalArgumentException("Namespace definition must supply a non-null URI"); - } - NamespaceHandler namespaceHandler = this.xmlBeanDefinitionReader.getNamespaceHandlerResolver().resolve(uri); - if (namespaceHandler == null) { - throw new BeanDefinitionParsingException(new Problem("No namespace handler found for URI: " + uri, + * Defines an Spring namespace definition to use. + * @param definition the namespace definition + */ + public void xmlns(Map definition) { + if (!definition.isEmpty()) { + for (Map.Entry entry : definition.entrySet()) { + String namespace = entry.getKey(); + String uri = entry.getValue(); + if (uri == null) { + throw new IllegalArgumentException("Namespace definition must supply a non-null URI"); + } + NamespaceHandler namespaceHandler = this.xmlBeanDefinitionReader.getNamespaceHandlerResolver().resolve(uri); + if (namespaceHandler == null) { + throw new BeanDefinitionParsingException(new Problem("No namespace handler found for URI: " + uri, new Location(new DescriptiveResource(("Groovy"))))); - } - this.namespaces.put(namespace, uri); - } - } - } + } + this.namespaces.put(namespace, uri); + } + } + } /** * Imports Spring bean definitions from either XML or Groovy sources into the current bean builder instance. @@ -335,25 +335,25 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp // INTERNAL HANDLING OF GROOVY CLOSURES AND PROPERTIES - /** + /** * This method overrides method invocation to create beans for each method name that * takes a class argument */ public Object invokeMethod(String name, Object arg) { - Object[] args = (Object[])arg; - if ("beans".equals(name) && args.length == 1 && args[0] instanceof Closure) { - return beans((Closure) args[0]); - } + Object[] args = (Object[])arg; + if ("beans".equals(name) && args.length == 1 && args[0] instanceof Closure) { + return beans((Closure) args[0]); + } else if ("ref".equals(name)) { String refName; if (args[0] == null) throw new IllegalArgumentException("Argument to ref() is not a valid bean or was not found"); - + if (args[0] instanceof RuntimeBeanReference) { refName = ((RuntimeBeanReference)args[0]).getBeanName(); } else { - refName = args[0].toString(); + refName = args[0].toString(); } boolean parentRef = false; if (args.length > 1) { @@ -363,27 +363,27 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } return new RuntimeBeanReference(refName, parentRef); } - else if (this.namespaces.containsKey(name) && args.length > 0 && (args[0] instanceof Closure)) { - GroovyDynamicElementReader reader = createDynamicElementReader(name); - reader.invokeMethod("doCall", args); - } + else if (this.namespaces.containsKey(name) && args.length > 0 && (args[0] instanceof Closure)) { + GroovyDynamicElementReader reader = createDynamicElementReader(name); + reader.invokeMethod("doCall", args); + } else if (args.length > 0 && args[0] instanceof Closure) { - // abstract bean definition - return invokeBeanDefiningMethod(name, args); + // abstract bean definition + return invokeBeanDefiningMethod(name, args); } else if (args.length > 0 && (args[0] instanceof Class || args[0] instanceof RuntimeBeanReference || args[0] instanceof Map)) { - return invokeBeanDefiningMethod(name, args); + return invokeBeanDefiningMethod(name, args); } else if (args.length > 1 && args[args.length -1] instanceof Closure) { return invokeBeanDefiningMethod(name, args); } - MetaClass mc = DefaultGroovyMethods.getMetaClass(getRegistry()); - if (!mc.respondsTo(getRegistry(), name, args).isEmpty()){ - return mc.invokeMethod(getRegistry(), name, args); - } - return this; + MetaClass mc = DefaultGroovyMethods.getMetaClass(getRegistry()); + if (!mc.respondsTo(getRegistry(), name, args).isEmpty()){ + return mc.invokeMethod(getRegistry(), name, args); + } + return this; } - + private boolean addDeferredProperty(String property, Object newValue) { if (newValue instanceof List) { this.deferredProperties.put(this.currentBeanDefinition.getBeanName() + '.' + property, @@ -431,102 +431,102 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * @return the bean definition wrapper */ private GroovyBeanDefinitionWrapper invokeBeanDefiningMethod(String beanName, Object[] args) { - boolean hasClosureArgument = args[args.length - 1] instanceof Closure; - if (args[0] instanceof Class) { - Class beanClass = (args[0] instanceof Class ? (Class) args[0] : args[0].getClass()); - if (args.length >= 1) { - if (hasClosureArgument) { + boolean hasClosureArgument = args[args.length - 1] instanceof Closure; + if (args[0] instanceof Class) { + Class beanClass = (args[0] instanceof Class ? (Class) args[0] : args[0].getClass()); + if (args.length >= 1) { + if (hasClosureArgument) { if (args.length-1 != 1) { - this.currentBeanDefinition = new GroovyBeanDefinitionWrapper( + this.currentBeanDefinition = new GroovyBeanDefinitionWrapper( beanName, beanClass, resolveConstructorArguments(args,1,args.length-1)); } else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, beanClass); - } + } } else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper( beanName, beanClass, resolveConstructorArguments(args,1,args.length)); } - } + } } else if (args[0] instanceof RuntimeBeanReference) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName); this.currentBeanDefinition.getBeanDefinition().setFactoryBeanName(((RuntimeBeanReference) args[0]).getBeanName()); } else if (args[0] instanceof Map) { - // named constructor arguments - if (args.length > 1 && args[1] instanceof Class) { - List constructorArgs = resolveConstructorArguments(args, 2, hasClosureArgument ? args.length-1 : args.length); - this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, (Class)args[1], constructorArgs); - Map namedArgs = (Map)args[0]; - for (Object o : namedArgs.keySet()) { - String propName = (String) o; - setProperty(propName, namedArgs.get(propName)); - } - } - // factory method syntax - else { + // named constructor arguments + if (args.length > 1 && args[1] instanceof Class) { + List constructorArgs = resolveConstructorArguments(args, 2, hasClosureArgument ? args.length-1 : args.length); + this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, (Class)args[1], constructorArgs); + Map namedArgs = (Map)args[0]; + for (Object o : namedArgs.keySet()) { + String propName = (String) o; + setProperty(propName, namedArgs.get(propName)); + } + } + // factory method syntax + else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName); - //First arg is the map containing factoryBean : factoryMethod - Map.Entry factoryBeanEntry = (Map.Entry) ((Map) args[0]).entrySet().iterator().next(); - // If we have a closure body, that will be the last argument. - // In between are the constructor args - int constructorArgsTest = hasClosureArgument?2:1; - // If we have more than this number of args, we have constructor args - if (args.length > constructorArgsTest){ - // factory-method requires args - int endOfConstructArgs = (hasClosureArgument? args.length - 1 : args.length); + //First arg is the map containing factoryBean : factoryMethod + Map.Entry factoryBeanEntry = (Map.Entry) ((Map) args[0]).entrySet().iterator().next(); + // If we have a closure body, that will be the last argument. + // In between are the constructor args + int constructorArgsTest = hasClosureArgument?2:1; + // If we have more than this number of args, we have constructor args + if (args.length > constructorArgsTest){ + // factory-method requires args + int endOfConstructArgs = (hasClosureArgument? args.length - 1 : args.length); this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, null, resolveConstructorArguments(args, 1, endOfConstructArgs)); - } + } else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName); - } + } this.currentBeanDefinition.getBeanDefinition().setFactoryBeanName(factoryBeanEntry.getKey().toString()); this.currentBeanDefinition.getBeanDefinition().setFactoryMethodName(factoryBeanEntry.getValue().toString()); - } + } - } - else if (args[0] instanceof Closure) { + } + else if (args[0] instanceof Closure) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName); this.currentBeanDefinition.getBeanDefinition().setAbstract(true); - } - else { - List constructorArgs = resolveConstructorArguments(args, 0, hasClosureArgument ? args.length-1 : args.length); - currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, null, constructorArgs); - } + } + else { + List constructorArgs = resolveConstructorArguments(args, 0, hasClosureArgument ? args.length-1 : args.length); + currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, null, constructorArgs); + } - if (hasClosureArgument) { + if (hasClosureArgument) { Closure callable = (Closure)args[args.length-1]; callable.setDelegate(this); - callable.setResolveStrategy(Closure.DELEGATE_FIRST); - callable.call(new Object[]{currentBeanDefinition}); + callable.setResolveStrategy(Closure.DELEGATE_FIRST); + callable.call(new Object[]{currentBeanDefinition}); } - GroovyBeanDefinitionWrapper beanDefinition = currentBeanDefinition; + GroovyBeanDefinitionWrapper beanDefinition = currentBeanDefinition; this.currentBeanDefinition = null; beanDefinition.getBeanDefinition().setAttribute(GroovyBeanDefinitionWrapper.class.getName(), beanDefinition); getRegistry().registerBeanDefinition(beanName, beanDefinition.getBeanDefinition()); return beanDefinition; } - protected List resolveConstructorArguments(Object[] args, int start, int end) { - Object[] constructorArgs = Arrays.copyOfRange(args, start, end); - for (int i = 0; i < constructorArgs.length; i++) { + protected List resolveConstructorArguments(Object[] args, int start, int end) { + Object[] constructorArgs = Arrays.copyOfRange(args, start, end); + for (int i = 0; i < constructorArgs.length; i++) { if (constructorArgs[i] instanceof GString) { constructorArgs[i] = constructorArgs[i].toString(); } - else if (constructorArgs[i] instanceof List) { - constructorArgs[i] = manageListIfNecessary((List) constructorArgs[i]); - } + else if (constructorArgs[i] instanceof List) { + constructorArgs[i] = manageListIfNecessary((List) constructorArgs[i]); + } else if (constructorArgs[i] instanceof Map){ - constructorArgs[i] = manageMapIfNecessary((Map) constructorArgs[i]); - } - } - return Arrays.asList(constructorArgs); - } + constructorArgs[i] = manageMapIfNecessary((Map) constructorArgs[i]); + } + } + return Arrays.asList(constructorArgs); + } /** * Checks whether there are any {@link RuntimeBeanReference} inside the Map @@ -578,39 +578,39 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp */ public void setProperty(String name, Object value) { if (this.currentBeanDefinition != null) { - applyPropertyToBeanDefinition(name, value); - } + applyPropertyToBeanDefinition(name, value); + } } - protected void applyPropertyToBeanDefinition(String name, Object value) { - if (value instanceof GString) { + protected void applyPropertyToBeanDefinition(String name, Object value) { + if (value instanceof GString) { value = value.toString(); } - if (addDeferredProperty(name, value)) { - return; - } - else if (value instanceof Closure) { - GroovyBeanDefinitionWrapper current = this.currentBeanDefinition; - try { - Closure callable = (Closure) value; - Class parameterType = callable.getParameterTypes()[0]; - if (parameterType.equals(Object.class)) { + if (addDeferredProperty(name, value)) { + return; + } + else if (value instanceof Closure) { + GroovyBeanDefinitionWrapper current = this.currentBeanDefinition; + try { + Closure callable = (Closure) value; + Class parameterType = callable.getParameterTypes()[0]; + if (parameterType.equals(Object.class)) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(""); - callable.call(this.currentBeanDefinition); - } - else { + callable.call(this.currentBeanDefinition); + } + else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(null, parameterType); - callable.call((Object) null); - } + callable.call((Object) null); + } - value = this.currentBeanDefinition.getBeanDefinition(); - } - finally { + value = this.currentBeanDefinition.getBeanDefinition(); + } + finally { this.currentBeanDefinition = current; - } - } + } + } this.currentBeanDefinition.addProperty(name, value); - } + } /** * This method overrides property retrieval in the scope of the GroovyBeanDefinitionReader to either: @@ -624,15 +624,15 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp return binding.getVariable(name); } else { - if (this.namespaces.containsKey(name)) { - return createDynamicElementReader(name); - } + if (this.namespaces.containsKey(name)) { + return createDynamicElementReader(name); + } if (getRegistry().containsBeanDefinition(name)) { GroovyBeanDefinitionWrapper beanDefinition = (GroovyBeanDefinitionWrapper) getRegistry().getBeanDefinition(name).getAttribute(GroovyBeanDefinitionWrapper.class.getName()); if (beanDefinition != null) { return new GroovyRuntimeBeanReference(name, beanDefinition, false); - } + } else { return new RuntimeBeanReference(name, false); } @@ -656,26 +656,26 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } else { return getMetaClass().getProperty(this, name); - } - } + } + } } - private GroovyDynamicElementReader createDynamicElementReader(String namespace) { + private GroovyDynamicElementReader createDynamicElementReader(String namespace) { XmlReaderContext readerContext = this.xmlBeanDefinitionReader.createReaderContext(new DescriptiveResource("Groovy")); BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext, getEnvironment()); boolean decorating = (this.currentBeanDefinition != null); if (!decorating) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(namespace); } - return new GroovyDynamicElementReader(namespace, this.namespaces, delegate, this.currentBeanDefinition, decorating) { - @Override - protected void afterInvocation() { - if (!this.decorating) { - currentBeanDefinition = null; - } - } - }; - } + return new GroovyDynamicElementReader(namespace, this.namespaces, delegate, this.currentBeanDefinition, decorating) { + @Override + protected void afterInvocation() { + if (!this.decorating) { + currentBeanDefinition = null; + } + } + }; + } /** diff --git a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java index 97dd212100c..4a70a42c6d2 100644 --- a/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java +++ b/spring-beans-groovy/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java @@ -50,7 +50,7 @@ class GroovyBeanDefinitionWrapper extends GroovyObjectSupport { private static final String FACTORY_METHOD = "factoryMethod"; private static final String INIT_METHOD = "initMethod"; private static final String DESTROY_METHOD = "destroyMethod"; - private static final String SINGLETON = "singleton"; + private static final String SINGLETON = "singleton"; private static final List dynamicProperties = new ArrayList(8); @@ -173,69 +173,69 @@ class GroovyBeanDefinitionWrapper extends GroovyObjectSupport { } public void setProperty(String property, Object newValue) { - if (PARENT.equals(property)) { - setParent(newValue); - } - else { - AbstractBeanDefinition bd = getBeanDefinition(); - if (AUTOWIRE.equals(property)) { - if ("byName".equals(newValue)) { - bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); - } - else if ("byType".equals(newValue)) { - bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); - } + if (PARENT.equals(property)) { + setParent(newValue); + } + else { + AbstractBeanDefinition bd = getBeanDefinition(); + if (AUTOWIRE.equals(property)) { + if ("byName".equals(newValue)) { + bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); + } + else if ("byType".equals(newValue)) { + bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); + } else if ("constructor".equals(newValue)) { bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR); } - else if (Boolean.TRUE.equals(newValue)) { - bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); - } - } - // constructorArgs - else if (CONSTRUCTOR_ARGS.equals(property) && newValue instanceof List) { - ConstructorArgumentValues cav = new ConstructorArgumentValues(); - List args = (List) newValue; + else if (Boolean.TRUE.equals(newValue)) { + bd.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME); + } + } + // constructorArgs + else if (CONSTRUCTOR_ARGS.equals(property) && newValue instanceof List) { + ConstructorArgumentValues cav = new ConstructorArgumentValues(); + List args = (List) newValue; for (Object arg : args) { cav.addGenericArgumentValue(arg); } - bd.setConstructorArgumentValues(cav); - } - // factoryBean - else if (FACTORY_BEAN.equals(property)) { - if (newValue != null) { - bd.setFactoryBeanName(newValue.toString()); + bd.setConstructorArgumentValues(cav); + } + // factoryBean + else if (FACTORY_BEAN.equals(property)) { + if (newValue != null) { + bd.setFactoryBeanName(newValue.toString()); } - } - // factoryMethod - else if (FACTORY_METHOD.equals(property)) { - if (newValue != null) - bd.setFactoryMethodName(newValue.toString()); - } - // initMethod - else if (INIT_METHOD.equals(property)) { - if (newValue != null) { - bd.setInitMethodName(newValue.toString()); + } + // factoryMethod + else if (FACTORY_METHOD.equals(property)) { + if (newValue != null) + bd.setFactoryMethodName(newValue.toString()); + } + // initMethod + else if (INIT_METHOD.equals(property)) { + if (newValue != null) { + bd.setInitMethodName(newValue.toString()); } - } + } // destroyMethod else if (DESTROY_METHOD.equals(property)) { if (newValue != null) { bd.setDestroyMethodName(newValue.toString()); } } - // singleton property - else if (SINGLETON.equals(property)) { - bd.setScope(Boolean.TRUE.equals(newValue) ? + // singleton property + else if (SINGLETON.equals(property)) { + bd.setScope(Boolean.TRUE.equals(newValue) ? BeanDefinition.SCOPE_SINGLETON : BeanDefinition.SCOPE_PROTOTYPE); - } - else if (this.definitionWrapper.isWritableProperty(property)) { + } + else if (this.definitionWrapper.isWritableProperty(property)) { this.definitionWrapper.setPropertyValue(property, newValue); - } - else { - super.setProperty(property, newValue); - } - } + } + else { + super.setProperty(property, newValue); + } + } } } diff --git a/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyApplicationContextDynamicBeanPropertyTests.groovy b/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyApplicationContextDynamicBeanPropertyTests.groovy index 1d4269279e8..3b15f76d73d 100644 --- a/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyApplicationContextDynamicBeanPropertyTests.groovy +++ b/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyApplicationContextDynamicBeanPropertyTests.groovy @@ -23,27 +23,27 @@ import org.springframework.context.support.GenericGroovyApplicationContext * @author Jeff Brown */ class GroovyApplicationContextDynamicBeanPropertyTests extends GroovyTestCase { - - void testAccessDynamicBeanProperties() { - def ctx = new GenericGroovyApplicationContext(); + + void testAccessDynamicBeanProperties() { + def ctx = new GenericGroovyApplicationContext(); ctx.reader.loadBeanDefinitions("org/springframework/context/groovy/applicationContext.groovy"); ctx.refresh() - def framework = ctx.framework - assertNotNull 'could not find framework bean', framework - assertEquals 'Grails', framework - } - - void testAccessingNonExistentBeanViaDynamicProperty() { + def framework = ctx.framework + assertNotNull 'could not find framework bean', framework + assertEquals 'Grails', framework + } + + void testAccessingNonExistentBeanViaDynamicProperty() { def ctx = new GenericGroovyApplicationContext(); ctx.reader.loadBeanDefinitions("org/springframework/context/groovy/applicationContext.groovy"); ctx.refresh() - def err = shouldFail(NoSuchBeanDefinitionException) { - ctx.someNonExistentBean - } - - assertEquals "No bean named 'someNonExistentBean' is defined", err - } + def err = shouldFail(NoSuchBeanDefinitionException) { + ctx.someNonExistentBean + } + + assertEquals "No bean named 'someNonExistentBean' is defined", err + } } diff --git a/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyBeanDefinitionReaderTests.groovy b/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyBeanDefinitionReaderTests.groovy index 035eecdb653..581c8234544 100644 --- a/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyBeanDefinitionReaderTests.groovy +++ b/spring-context/src/test/groovy/org/springframework/context/groovy/GroovyBeanDefinitionReaderTests.groovy @@ -54,250 +54,250 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { appCtx.refresh() def foo = appCtx.getBean("foo") - assertEquals "hello", foo + assertEquals "hello", foo } - void testSingletonPropertyOnBeanDefinition() { + void testSingletonPropertyOnBeanDefinition() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - singletonBean(Bean1) { bean -> - bean.singleton = true - } - nonSingletonBean(Bean1) { bean -> - bean.singleton = false - } - unSpecifiedScopeBean(Bean1) - } - appCtx.refresh() - - assertTrue 'singletonBean should have been a singleton', appCtx.isSingleton('singletonBean') - assertFalse 'nonSingletonBean should not have been a singleton', appCtx.isSingleton('nonSingletonBean') - assertTrue 'unSpecifiedScopeBean should not have been a singleton', appCtx.isSingleton('unSpecifiedScopeBean') - } - - void testInheritPropertiesFromAbstractBean() { + reader.beans { + singletonBean(Bean1) { bean -> + bean.singleton = true + } + nonSingletonBean(Bean1) { bean -> + bean.singleton = false + } + unSpecifiedScopeBean(Bean1) + } + appCtx.refresh() + + assertTrue 'singletonBean should have been a singleton', appCtx.isSingleton('singletonBean') + assertFalse 'nonSingletonBean should not have been a singleton', appCtx.isSingleton('nonSingletonBean') + assertTrue 'unSpecifiedScopeBean should not have been a singleton', appCtx.isSingleton('unSpecifiedScopeBean') + } + + void testInheritPropertiesFromAbstractBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - myB(Bean1){ - person = "wombat" - } - - myAbstractA(Bean2){ bean -> - bean.'abstract' = true - age = 10 - bean1 = myB - } - myConcreteB { - it.parent = myAbstractA - } - } - - appCtx.refresh() - - def bean = appCtx.getBean("myConcreteB") - assertEquals 10, bean.age - assertNotNull bean.bean1 - } - - void testContextComponentScanSpringTag() { + reader.beans { + myB(Bean1){ + person = "wombat" + } + + myAbstractA(Bean2){ bean -> + bean.'abstract' = true + age = 10 + bean1 = myB + } + myConcreteB { + it.parent = myAbstractA + } + } + + appCtx.refresh() + + def bean = appCtx.getBean("myConcreteB") + assertEquals 10, bean.age + assertNotNull bean.bean1 + } + + void testContextComponentScanSpringTag() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - xmlns context:"http://www.springframework.org/schema/context" + reader.beans { + xmlns context:"http://www.springframework.org/schema/context" - context.'component-scan'( 'base-package' :" org.springframework.context.groovy" ) - } + context.'component-scan'( 'base-package' :" org.springframework.context.groovy" ) + } - appCtx.refresh() + appCtx.refresh() - def p = appCtx.getBean("person") - assertTrue(p instanceof AdvisedPerson) - assertNotNull p - } + def p = appCtx.getBean("person") + assertTrue(p instanceof AdvisedPerson) + assertNotNull p + } - void testUseSpringNamespaceAsMethod() { + void testUseSpringNamespaceAsMethod() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - xmlns aop:"http://www.springframework.org/schema/aop" - - fred(AdvisedPerson) { - name = "Fred" - age = 45 - } - birthdayCardSenderAspect(BirthdayCardSender) + reader.beans { + xmlns aop:"http://www.springframework.org/schema/aop" - aop { - config("proxy-target-class":true) { - aspect( id:"sendBirthdayCard",ref:"birthdayCardSenderAspect" ) { - after method:"onBirthday", pointcut: "execution(void org.springframework.context.groovy.AdvisedPerson.birthday()) and this(person)" - } - } - } - } + fred(AdvisedPerson) { + name = "Fred" + age = 45 + } + birthdayCardSenderAspect(BirthdayCardSender) + + aop { + config("proxy-target-class":true) { + aspect( id:"sendBirthdayCard",ref:"birthdayCardSenderAspect" ) { + after method:"onBirthday", pointcut: "execution(void org.springframework.context.groovy.AdvisedPerson.birthday()) and this(person)" + } + } + } + } - appCtx.refresh() + appCtx.refresh() - def fred = appCtx.getBean("fred") - assertTrue (fred instanceof SpringProxy) - fred.birthday() + def fred = appCtx.getBean("fred") + assertTrue (fred instanceof SpringProxy) + fred.birthday() - BirthdayCardSender birthDaySender = appCtx.getBean("birthdayCardSenderAspect") + BirthdayCardSender birthDaySender = appCtx.getBean("birthdayCardSenderAspect") - assertEquals 1, birthDaySender.peopleSentCards.size() - assertEquals "Fred", birthDaySender.peopleSentCards[0].name - } + assertEquals 1, birthDaySender.peopleSentCards.size() + assertEquals "Fred", birthDaySender.peopleSentCards[0].name + } - void testUseTwoSpringNamespaces() { + void testUseTwoSpringNamespaces() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - TestScope scope = new TestScope() - appCtx.getBeanFactory().registerScope("test", scope) + TestScope scope = new TestScope() + appCtx.getBeanFactory().registerScope("test", scope) - reader.beans { - xmlns aop:"http://www.springframework.org/schema/aop" - xmlns util:"http://www.springframework.org/schema/util" - scopedList(ArrayList) { bean -> - bean.scope = "test" - aop.'scoped-proxy'() - } - util.list(id: 'foo') { - value 'one' - value 'two' - } + reader.beans { + xmlns aop:"http://www.springframework.org/schema/aop" + xmlns util:"http://www.springframework.org/schema/util" + scopedList(ArrayList) { bean -> + bean.scope = "test" + aop.'scoped-proxy'() + } + util.list(id: 'foo') { + value 'one' + value 'two' + } } - appCtx.refresh() + appCtx.refresh() - assert ['one', 'two'] == appCtx.getBean("foo") + assert ['one', 'two'] == appCtx.getBean("foo") - assertNotNull appCtx.getBean("scopedList") - assertNotNull appCtx.getBean("scopedList").size() - assertNotNull appCtx.getBean("scopedList").size() + assertNotNull appCtx.getBean("scopedList") + assertNotNull appCtx.getBean("scopedList").size() + assertNotNull appCtx.getBean("scopedList").size() - // should only be true because bean not initialized until proxy called - assertEquals 2, scope.instanceCount + // should only be true because bean not initialized until proxy called + assertEquals 2, scope.instanceCount appCtx = new GenericApplicationContext() reader = new GroovyBeanDefinitionReader(appCtx) - appCtx.getBeanFactory().registerScope("test", scope) - - reader.beans { - xmlns aop:"http://www.springframework.org/schema/aop", - util:"http://www.springframework.org/schema/util" - scopedList(ArrayList) { bean -> - bean.scope = "test" - aop.'scoped-proxy'() - } - util.list(id: 'foo') { - value 'one' - value 'two' - } - } - appCtx.refresh() - - assert ['one', 'two'] == appCtx.getBean("foo") - - assertNotNull appCtx.getBean("scopedList") - assertNotNull appCtx.getBean("scopedList").size() - assertNotNull appCtx.getBean("scopedList").size() - - // should only be true because bean not initialized until proxy called - assertEquals 4, scope.instanceCount - } - - void testSpringAopSupport() { + appCtx.getBeanFactory().registerScope("test", scope) + + reader.beans { + xmlns aop:"http://www.springframework.org/schema/aop", + util:"http://www.springframework.org/schema/util" + scopedList(ArrayList) { bean -> + bean.scope = "test" + aop.'scoped-proxy'() + } + util.list(id: 'foo') { + value 'one' + value 'two' + } + } + appCtx.refresh() + + assert ['one', 'two'] == appCtx.getBean("foo") + + assertNotNull appCtx.getBean("scopedList") + assertNotNull appCtx.getBean("scopedList").size() + assertNotNull appCtx.getBean("scopedList").size() + + // should only be true because bean not initialized until proxy called + assertEquals 4, scope.instanceCount + } + + void testSpringAopSupport() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - xmlns aop:"http://www.springframework.org/schema/aop" + reader.beans { + xmlns aop:"http://www.springframework.org/schema/aop" - fred(AdvisedPerson) { - name = "Fred" - age = 45 - } - birthdayCardSenderAspect(BirthdayCardSender) + fred(AdvisedPerson) { + name = "Fred" + age = 45 + } + birthdayCardSenderAspect(BirthdayCardSender) - aop.config("proxy-target-class":true) { - aspect( id:"sendBirthdayCard",ref:"birthdayCardSenderAspect" ) { - after method:"onBirthday", pointcut: "execution(void org.springframework.context.groovy.AdvisedPerson.birthday()) and this(person)" - } - } - } + aop.config("proxy-target-class":true) { + aspect( id:"sendBirthdayCard",ref:"birthdayCardSenderAspect" ) { + after method:"onBirthday", pointcut: "execution(void org.springframework.context.groovy.AdvisedPerson.birthday()) and this(person)" + } + } + } - appCtx.refresh() + appCtx.refresh() - def fred = appCtx.getBean("fred") - assertTrue (fred instanceof SpringProxy) - fred.birthday() + def fred = appCtx.getBean("fred") + assertTrue (fred instanceof SpringProxy) + fred.birthday() - BirthdayCardSender birthDaySender = appCtx.getBean("birthdayCardSenderAspect") + BirthdayCardSender birthDaySender = appCtx.getBean("birthdayCardSenderAspect") - assertEquals 1, birthDaySender.peopleSentCards.size() - assertEquals "Fred", birthDaySender.peopleSentCards[0].name - } + assertEquals 1, birthDaySender.peopleSentCards.size() + assertEquals "Fred", birthDaySender.peopleSentCards[0].name + } - void testSpringScopedProxyBean() { + void testSpringScopedProxyBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - TestScope scope = new TestScope() - appCtx.getBeanFactory().registerScope("test", scope) - reader.beans { - xmlns aop:"http://www.springframework.org/schema/aop" - scopedList(ArrayList) { bean -> - bean.scope = "test" - aop.'scoped-proxy'() - } - } - appCtx.refresh() - - assertNotNull appCtx.getBean("scopedList") - assertNotNull appCtx.getBean("scopedList").size() - assertNotNull appCtx.getBean("scopedList").size() - - // should only be true because bean not initialized until proxy called - assertEquals 2, scope.instanceCount - } - - void testSpringNamespaceBean() { + TestScope scope = new TestScope() + appCtx.getBeanFactory().registerScope("test", scope) + reader.beans { + xmlns aop:"http://www.springframework.org/schema/aop" + scopedList(ArrayList) { bean -> + bean.scope = "test" + aop.'scoped-proxy'() + } + } + appCtx.refresh() + + assertNotNull appCtx.getBean("scopedList") + assertNotNull appCtx.getBean("scopedList").size() + assertNotNull appCtx.getBean("scopedList").size() + + // should only be true because bean not initialized until proxy called + assertEquals 2, scope.instanceCount + } + + void testSpringNamespaceBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - xmlns util: 'http://www.springframework.org/schema/util' - util.list(id: 'foo') { - value 'one' - value 'two' - } - } + reader.beans { + xmlns util: 'http://www.springframework.org/schema/util' + util.list(id: 'foo') { + value 'one' + value 'two' + } + } appCtx.refresh() - assert ['one', 'two'] == appCtx.getBean('foo') - } + assert ['one', 'two'] == appCtx.getBean('foo') + } - void testNamedArgumentConstructor() { + void testNamedArgumentConstructor() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - holyGrail(HolyGrailQuest) - knights(KnightOfTheRoundTable, "Camelot", leader:"lancelot", quest: holyGrail) - } - appCtx.refresh() + reader.beans { + holyGrail(HolyGrailQuest) + knights(KnightOfTheRoundTable, "Camelot", leader:"lancelot", quest: holyGrail) + } + appCtx.refresh() - KnightOfTheRoundTable knights = appCtx.getBean("knights") - HolyGrailQuest quest = appCtx.getBean("holyGrail") + KnightOfTheRoundTable knights = appCtx.getBean("knights") + HolyGrailQuest quest = appCtx.getBean("holyGrail") - assertEquals "Camelot", knights.name - assertEquals "lancelot", knights.leader - assertEquals quest, knights.quest - } + assertEquals "Camelot", knights.name + assertEquals "lancelot", knights.leader + assertEquals quest, knights.quest + } - void testAbstractBeanDefinition() { + void testAbstractBeanDefinition() { def appCtx = new GenericGroovyApplicationContext() appCtx.reader.beans { abstractBean { @@ -317,9 +317,9 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { appCtx.abstractBean } assertEquals "Lancelot", knights.leader - } + } - void testAbstractBeanDefinitionWithClass() { + void testAbstractBeanDefinitionWithClass() { def appCtx = new GenericGroovyApplicationContext() appCtx.reader.beans { abstractBean(KnightOfTheRoundTable) { bean -> @@ -340,30 +340,30 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { def knights = appCtx.knights assert knights assertEquals "Lancelot", knights.leader - } + } - void testScopes() { + void testScopes() { def appCtx = new GenericGroovyApplicationContext() appCtx.reader.beans { - myBean(ScopeTest) { bean -> - bean.scope = "prototype" - } - myBean2(ScopeTest) - } - appCtx.refresh() + myBean(ScopeTest) { bean -> + bean.scope = "prototype" + } + myBean2(ScopeTest) + } + appCtx.refresh() - def b1 = appCtx.myBean - def b2 = appCtx.myBean + def b1 = appCtx.myBean + def b2 = appCtx.myBean - assert b1 != b2 + assert b1 != b2 - b1 = appCtx.myBean2 - b2 = appCtx.myBean2 + b1 = appCtx.myBean2 + b2 = appCtx.myBean2 - assertEquals b1, b2 - } + assertEquals b1, b2 + } - void testSimpleBean() { + void testSimpleBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { @@ -371,22 +371,22 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { person = "homer" age = 45 props = [overweight:true, height:"1.8m"] - children = ["bart", "lisa"] + children = ["bart", "lisa"] } } appCtx.refresh() - + assert appCtx.containsBean("bean1") def bean1 = appCtx.getBean("bean1") - + assertEquals "homer", bean1.person assertEquals 45, bean1.age assertEquals true, bean1.props?.overweight assertEquals "1.8m", bean1.props?.height assertEquals(["bart", "lisa"], bean1.children) - + } - + void testBeanWithParentRef() { def parentAppCtx = new GenericApplicationContext() def parentBeanReader = new GroovyBeanDefinitionReader(parentAppCtx) @@ -395,7 +395,7 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { person = "homer" age = 45 props = [overweight:true, height:"1.8m"] - children = ["bart", "lisa"] + children = ["bart", "lisa"] } } parentAppCtx.refresh() @@ -414,7 +414,7 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { def bart = appCtx.getBean("bart") assertEquals "homer",bart.parent?.person } - + void testWithAnonymousInnerBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) @@ -425,40 +425,40 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { } lisa(Bean1) { person = "lisa" - age = 9 - } + age = 9 + } marge(Bean2) { person = "marge" bean1 = { Bean1 b -> - person = "homer" - age = 45 - props = [overweight:true, height:"1.8m"] - children = ["bart", "lisa"] } + person = "homer" + age = 45 + props = [overweight:true, height:"1.8m"] + children = ["bart", "lisa"] } children = [bart, lisa] } } appCtx.refresh() - + def marge = appCtx.getBean("marge") assertEquals "homer", marge.bean1.person } - + void testWithUntypedAnonymousInnerBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { - homer(Bean1Factory) + homer(Bean1Factory) bart(Bean1) { person = "bart" age = 11 } lisa(Bean1) { person = "lisa" - age = 9 - } + age = 9 + } marge(Bean2) { person = "marge" - bean1 = { bean -> + bean1 = { bean -> bean.factoryBean = "homer" bean.factoryMethod = "newInstance" person = "homer" } @@ -466,11 +466,11 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { } } appCtx.refresh() - + def marge = appCtx.getBean("marge") assertEquals "homer", marge.bean1.person } - + void testBeanReferences() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) @@ -479,7 +479,7 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { person = "homer" age = 45 props = [overweight:true, height:"1.8m"] - children = ["bart", "lisa"] + children = ["bart", "lisa"] } bart(Bean1) { person = "bart" @@ -487,7 +487,7 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { } lisa(Bean1) { person = "lisa" - age = 9 + age = 9 } marge(Bean2) { person = "marge" @@ -496,19 +496,19 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { } } appCtx.refresh() - + def homer = appCtx.getBean("homer") def marge = appCtx.getBean("marge") def bart = appCtx.getBean("bart") def lisa = appCtx.getBean("lisa") - + assertEquals homer, marge.bean1 assertEquals 2, marge.children.size() - + assertTrue marge.children.contains(bart) assertTrue marge.children.contains(lisa) } - + void testBeanWithConstructor() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) @@ -518,17 +518,17 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { age = 45 } marge(Bean3, "marge", homer) { - age = 40 + age = 40 } - } + } appCtx.refresh() - + def marge = appCtx.getBean("marge") assertEquals "marge", marge.person assertEquals "homer", marge.bean1.person assertEquals 40, marge.age } - + void testBeanWithFactoryMethod() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) @@ -538,17 +538,17 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { age = 45 } def marge = marge(Bean4) { - person = "marge" + person = "marge" } marge.factoryMethod = "getInstance" - } + } appCtx.refresh() - + def marge = appCtx.getBean("marge") - + assert "marge", marge.person } - + void testBeanWithFactoryMethodUsingClosureArgs() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) @@ -558,75 +558,75 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { age = 45 } marge(Bean4) { bean -> - bean.factoryMethod = "getInstance" - person = "marge" + bean.factoryMethod = "getInstance" + person = "marge" } - } + } appCtx.refresh() - + def marge = appCtx.getBean("marge") assert "marge", marge.person } - + void testBeanWithFactoryMethodWithConstructorArgs() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { beanFactory(Bean1FactoryWithArgs){} - + homer(beanFactory:"newInstance", "homer") { age = 45 } //Test with no closure body marge(beanFactory:"newInstance", "marge") - + //Test more verbose method mcBain("mcBain"){ bean -> bean.factoryBean="beanFactory" bean.factoryMethod="newInstance" - + } } appCtx.refresh() - + def homer = appCtx.getBean("homer") - + assert "homer", homer.person assert 45, homer.age - + assert "marge", appCtx.getBean("marge").person - + assert "mcBain", appCtx.getBean("mcBain").person } - void testGetBeanDefinitions() { + void testGetBeanDefinitions() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - jeff(Bean1) { - person = 'jeff' - } - graeme(Bean1) { - person = 'graeme' - } - guillaume(Bean1) { - person = 'guillaume' - } - } + reader.beans { + jeff(Bean1) { + person = 'jeff' + } + graeme(Bean1) { + person = 'graeme' + } + guillaume(Bean1) { + person = 'guillaume' + } + } junit.framework.TestCase.assertEquals 'beanDefinitions was the wrong size', 3, reader.registry.beanDefinitionCount - assertNotNull 'beanDefinitions did not contain jeff', reader.registry.getBeanDefinition('jeff') - assertNotNull 'beanDefinitions did not contain guillaume', reader.registry.getBeanDefinition('guillaume') - assertNotNull 'beanDefinitions did not contain graeme', reader.registry.getBeanDefinition('graeme') - } + assertNotNull 'beanDefinitions did not contain jeff', reader.registry.getBeanDefinition('jeff') + assertNotNull 'beanDefinitions did not contain guillaume', reader.registry.getBeanDefinition('guillaume') + assertNotNull 'beanDefinitions did not contain graeme', reader.registry.getBeanDefinition('graeme') + } - void testBeanWithFactoryBean() { + void testBeanWithFactoryBean() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { myFactory(Bean1Factory) - + homer(myFactory) { bean -> bean.factoryMethod = "newInstance" person = "homer" @@ -636,28 +636,28 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { appCtx.refresh() def homer = appCtx.getBean("homer") - + assertEquals "homer", homer.person } - + void testBeanWithFactoryBeanAndMethod() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { myFactory(Bean1Factory) - + homer(myFactory:"newInstance") { bean -> person = "homer" age = 45 } } - + appCtx.refresh() - + def homer = appCtx.getBean("homer") assertEquals "homer", homer.person - } - + } + void testLoadExternalBeans() { def appCtx = new GenericGroovyApplicationContext("org/springframework/context/groovy/applicationContext.groovy") @@ -679,11 +679,11 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { def reader = new GroovyBeanDefinitionReader(appCtx) reader.beans { - quest(HolyGrailQuest) + quest(HolyGrailQuest) - knight(KnightOfTheRoundTable, "Bedivere") { - quest = ref("quest") - } + knight(KnightOfTheRoundTable, "Bedivere") { + quest = ref("quest") + } } appCtx.refresh() @@ -692,43 +692,43 @@ class GroovyBeanDefinitionReaderTests extends GroovyTestCase { knight.embarkOnQuest() } - void testAbstractBeanSpecifyingClass() { + void testAbstractBeanSpecifyingClass() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - abstractKnight(KnightOfTheRoundTable) { bean -> - bean.'abstract' = true - leader = "King Arthur" - } + reader.beans { + abstractKnight(KnightOfTheRoundTable) { bean -> + bean.'abstract' = true + leader = "King Arthur" + } - lancelot("lancelot") { bean -> - bean.parent = ref("abstractKnight") - } + lancelot("lancelot") { bean -> + bean.parent = ref("abstractKnight") + } - abstractPerson(Bean1) { bean -> - bean.'abstract'=true - age = 45 - } - homerBean { bean -> - bean.parent = ref("abstractPerson") - person = "homer" - } - } + abstractPerson(Bean1) { bean -> + bean.'abstract'=true + age = 45 + } + homerBean { bean -> + bean.parent = ref("abstractPerson") + person = "homer" + } + } appCtx.refresh() - def lancelot = appCtx.getBean("lancelot") - assertEquals "King Arthur", lancelot.leader - assertEquals "lancelot", lancelot.name + def lancelot = appCtx.getBean("lancelot") + assertEquals "King Arthur", lancelot.leader + assertEquals "lancelot", lancelot.name - def homerBean = appCtx.getBean("homerBean") + def homerBean = appCtx.getBean("homerBean") - assertEquals 45, homerBean.age - assertEquals "homer", homerBean.person - } + assertEquals 45, homerBean.age + assertEquals "homer", homerBean.person + } void testGroovyBeanDefinitionReaderWithScript() { - def script = ''' + def script = ''' def appCtx = new org.springframework.context.support.GenericGroovyApplicationContext() appCtx.reader.beans { quest(org.springframework.context.groovy.HolyGrailQuest) {} @@ -737,38 +737,38 @@ knight(org.springframework.context.groovy.KnightOfTheRoundTable, "Bedivere") { q } appCtx.refresh() return appCtx - ''' - def appCtx = new GroovyShell().evaluate(script) +''' + def appCtx = new GroovyShell().evaluate(script) - def knight = appCtx.getBean('knight') - knight.embarkOnQuest() - } + def knight = appCtx.getBean('knight') + knight.embarkOnQuest() + } - // test for GRAILS-5057 - void testRegisterBeans() { + // test for GRAILS-5057 + void testRegisterBeans() { def appCtx = new GenericApplicationContext() - def reader = new GroovyBeanDefinitionReader(appCtx) + def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - personA(AdvisedPerson) { - name = "Bob" - } - } + reader.beans { + personA(AdvisedPerson) { + name = "Bob" + } + } appCtx.refresh() - assertEquals "Bob", appCtx.getBean("personA").name + assertEquals "Bob", appCtx.getBean("personA").name appCtx = new GenericApplicationContext() - reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - personA(AdvisedPerson) { - name = "Fred" - } - } + reader = new GroovyBeanDefinitionReader(appCtx) + reader.beans { + personA(AdvisedPerson) { + name = "Fred" + } + } appCtx.refresh() - assertEquals "Fred", appCtx.getBean("personA").name - } + assertEquals "Fred", appCtx.getBean("personA").name + } void testListOfBeansAsConstructorArg() { def appCtx = new GenericApplicationContext() @@ -814,81 +814,81 @@ return appCtx assertEquals 9, beanWithMap.peopleByName.lisa.age assertEquals "bart", beanWithMap.peopleByName.bart.person } - - void testAnonymousInnerBeanViaBeanMethod() { + + void testAnonymousInnerBeanViaBeanMethod() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - bart(Bean1) { - person = "bart" - age = 11 - } - lisa(Bean1) { - person = "lisa" - age = 9 - } - marge(Bean2) { - person = "marge" - bean1 = bean(Bean1) { - person = "homer" - age = 45 - props = [overweight:true, height:"1.8m"] - children = ["bart", "lisa"] - } - children = [bart, lisa] - } - } - appCtx.refresh() - - def marge = appCtx.getBean("marge") - assertEquals "homer", marge.bean1.person - } - - void testAnonymousInnerBeanViaBeanMethodWithConstructorArgs() { + reader.beans { + bart(Bean1) { + person = "bart" + age = 11 + } + lisa(Bean1) { + person = "lisa" + age = 9 + } + marge(Bean2) { + person = "marge" + bean1 = bean(Bean1) { + person = "homer" + age = 45 + props = [overweight:true, height:"1.8m"] + children = ["bart", "lisa"] + } + children = [bart, lisa] + } + } + appCtx.refresh() + + def marge = appCtx.getBean("marge") + assertEquals "homer", marge.bean1.person + } + + void testAnonymousInnerBeanViaBeanMethodWithConstructorArgs() { def appCtx = new GenericApplicationContext() def reader = new GroovyBeanDefinitionReader(appCtx) - reader.beans { - bart(Bean1) { - person = "bart" - age = 11 - } - lisa(Bean1) { - person = "lisa" - age = 9 - } - marge(Bean2) { - person = "marge" - bean3 = bean(Bean3, "homer", lisa) { - person = "homer" - age = 45 - } - children = [bart, lisa] - } - } - appCtx.refresh() - - def marge = appCtx.getBean("marge") - - assertEquals "homer", marge.bean3.person - assertEquals "lisa", marge.bean3.bean1.person - } + reader.beans { + bart(Bean1) { + person = "bart" + age = 11 + } + lisa(Bean1) { + person = "lisa" + age = 9 + } + marge(Bean2) { + person = "marge" + bean3 = bean(Bean3, "homer", lisa) { + person = "homer" + age = 45 + } + children = [bart, lisa] + } + } + appCtx.refresh() + + def marge = appCtx.getBean("marge") + + assertEquals "homer", marge.bean3.person + assertEquals "lisa", marge.bean3.bean1.person + } } class HolyGrailQuest { - void start() { println "lets begin" } + void start() { println "lets begin" } } class KnightOfTheRoundTable { - String name - String leader - KnightOfTheRoundTable(String n) { - this.name = n - } - HolyGrailQuest quest - - void embarkOnQuest() { - quest.start() - } +String name +String leader +KnightOfTheRoundTable(String n) { + this.name = n +} +HolyGrailQuest quest + +void embarkOnQuest() { + quest.start() +} } // simple bean @@ -900,7 +900,7 @@ class Bean1 { } // bean referencing other bean class Bean2 { - int age + int age String person Bean1 bean1 Bean3 bean3 @@ -928,17 +928,17 @@ class Bean4 { } // bean with List-valued constructor arg class Bean5 { - Bean5(List people) { - this.people = people - } - List people + Bean5(List people) { + this.people = people + } + List people } // bean with Map-valued constructor arg class Bean6 { - Bean6(Map peopleByName) { - this.peopleByName = peopleByName - } - Map peopleByName + Bean6(Map peopleByName) { + this.peopleByName = peopleByName + } + Map peopleByName } // a factory bean class Bean1Factory { @@ -949,44 +949,44 @@ class Bean1Factory { class ScopeTest {} class TestScope implements Scope { - int instanceCount + int instanceCount - public Object remove(String name) { - // do nothing - } + public Object remove(String name) { + // do nothing + } - public void registerDestructionCallback(String name, Runnable callback) { - } + public void registerDestructionCallback(String name, Runnable callback) { + } - public String getConversationId() { - return "mock" - } + public String getConversationId() { + return "mock" + } - public Object get(String name, ObjectFactory objectFactory) { - instanceCount++ - objectFactory.getObject() + public Object get(String name, ObjectFactory objectFactory) { + instanceCount++ + objectFactory.getObject() - } + } - public Object resolveContextualObject(String s) { - return null; // noop - } + public Object resolveContextualObject(String s) { + return null; // noop + } } class BirthdayCardSender { - List peopleSentCards = [] - public void onBirthday(AdvisedPerson person) { - peopleSentCards << person - } +List peopleSentCards = [] +public void onBirthday(AdvisedPerson person) { + peopleSentCards << person +} } @Component(value = "person") public class AdvisedPerson { - int age; - String name; +int age; +String name; - public void birthday() { - ++age; - } +public void birthday() { + ++age; +} } class SomeClass { diff --git a/spring-context/src/test/java/org/springframework/context/groovy/GroovyApplicationContextTests.java b/spring-context/src/test/java/org/springframework/context/groovy/GroovyApplicationContextTests.java index 73f3683f4c2..3810d4b205e 100644 --- a/spring-context/src/test/java/org/springframework/context/groovy/GroovyApplicationContextTests.java +++ b/spring-context/src/test/java/org/springframework/context/groovy/GroovyApplicationContextTests.java @@ -35,32 +35,32 @@ public class GroovyApplicationContextTests extends TestCase { assertEquals("Grails", framework); } - public void testLoadingMultipleConfigFiles() { + public void testLoadingMultipleConfigFiles() { GenericGroovyApplicationContext ctx = new GenericGroovyApplicationContext( "org/springframework/context/groovy/applicationContext2.groovy", "org/springframework/context/groovy/applicationContext.groovy"); - Object framework = ctx.getBean("framework"); - assertNotNull("could not find framework bean", framework); - assertEquals("Grails", framework); + Object framework = ctx.getBean("framework"); + assertNotNull("could not find framework bean", framework); + assertEquals("Grails", framework); - Object company = ctx.getBean("company"); - assertNotNull("could not find company bean", company); - assertEquals("SpringSource", company); - } + Object company = ctx.getBean("company"); + assertNotNull("could not find company bean", company); + assertEquals("SpringSource", company); + } - public void testLoadingMultipleConfigFilesWithRelativeClass() { + public void testLoadingMultipleConfigFilesWithRelativeClass() { GenericGroovyApplicationContext ctx = new GenericGroovyApplicationContext(); ctx.load(GroovyApplicationContextTests.class, "applicationContext2.groovy", "applicationContext.groovy"); ctx.refresh(); - Object framework = ctx.getBean("framework"); - assertNotNull("could not find framework bean", framework); - assertEquals("Grails", framework); + Object framework = ctx.getBean("framework"); + assertNotNull("could not find framework bean", framework); + assertEquals("Grails", framework); - Object company = ctx.getBean("company"); - assertNotNull("could not find company bean", company); - assertEquals("SpringSource", company); - } + Object company = ctx.getBean("company"); + assertNotNull("could not find company bean", company); + assertEquals("SpringSource", company); + } }