Groovy-based bean definitions
Formerly known as the Grails BeanBuilder, now in Spring proper. Based on https://github.com/spring-projects/spring-framework/pull/355 but heavily refactored and restructured. Issue: SPR-7123
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -259,6 +259,18 @@ public class MutablePropertyValues implements PropertyValues, Serializable {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the raw property value, if any.
|
||||
* @param propertyName the name to search for
|
||||
* @return the raw property value, or {@code null}
|
||||
* @see #getPropertyValue(String)
|
||||
* @see PropertyValue#getValue()
|
||||
*/
|
||||
public Object get(String propertyName) {
|
||||
PropertyValue pv = getPropertyValue(propertyName);
|
||||
return (pv != null ? pv.getValue() : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PropertyValues changesSince(PropertyValues old) {
|
||||
MutablePropertyValues changes = new MutablePropertyValues();
|
||||
|
||||
@@ -324,6 +324,13 @@ public class BeanDefinitionParserDelegate {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the default settings assuming a {@code null} parent delegate.
|
||||
*/
|
||||
public void initDefaults(Element root) {
|
||||
initDefaults(root, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the default lazy-init, autowire, dependency check settings,
|
||||
* init-method, destroy-method and merge settings. Support nested 'beans'
|
||||
@@ -337,16 +344,6 @@ public class BeanDefinitionParserDelegate {
|
||||
this.readerContext.fireDefaultsRegistered(this.defaults);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the default settings assuming a {@code null} parent delegate.
|
||||
* @deprecated in Spring 3.1 in favor of
|
||||
* {@link #initDefaults(Element, BeanDefinitionParserDelegate)}
|
||||
*/
|
||||
@Deprecated
|
||||
public void initDefaults(Element root) {
|
||||
initDefaults(root, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the given DocumentDefaultsDefinition instance with the default lazy-init,
|
||||
* autowire, dependency check settings, init-method, destroy-method and merge settings.
|
||||
@@ -1454,7 +1451,7 @@ public class BeanDefinitionParserDelegate {
|
||||
return finalDefinition;
|
||||
}
|
||||
|
||||
private BeanDefinitionHolder decorateIfRequired(
|
||||
public BeanDefinitionHolder decorateIfRequired(
|
||||
Node node, BeanDefinitionHolder originalDef, BeanDefinition containingBd) {
|
||||
|
||||
String namespaceUri = getNamespaceURI(node);
|
||||
|
||||
@@ -135,7 +135,7 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume
|
||||
// then ultimately reset this.delegate back to its original (parent) reference.
|
||||
// this behavior emulates a stack of delegates without actually necessitating one.
|
||||
BeanDefinitionParserDelegate parent = this.delegate;
|
||||
this.delegate = createHelper(this.readerContext, root, parent);
|
||||
this.delegate = createDelegate(this.readerContext, root, parent);
|
||||
|
||||
preProcessXml(root);
|
||||
parseBeanDefinitions(root, this.delegate);
|
||||
@@ -144,10 +144,10 @@ public class DefaultBeanDefinitionDocumentReader implements BeanDefinitionDocume
|
||||
this.delegate = parent;
|
||||
}
|
||||
|
||||
protected BeanDefinitionParserDelegate createHelper(
|
||||
protected BeanDefinitionParserDelegate createDelegate(
|
||||
XmlReaderContext readerContext, Element root, BeanDefinitionParserDelegate parentDelegate) {
|
||||
|
||||
BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext, environment);
|
||||
BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext, this.environment);
|
||||
delegate.initDefaults(root, parentDelegate);
|
||||
return delegate;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -381,13 +381,13 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {
|
||||
* @param resource the resource descriptor for the XML file
|
||||
* @return the number of bean definitions found
|
||||
* @throws BeanDefinitionStoreException in case of loading or parsing errors
|
||||
* @see #doLoadDocument
|
||||
* @see #registerBeanDefinitions
|
||||
*/
|
||||
protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource)
|
||||
throws BeanDefinitionStoreException {
|
||||
try {
|
||||
int validationMode = getValidationModeForResource(resource);
|
||||
Document doc = this.documentLoader.loadDocument(
|
||||
inputSource, getEntityResolver(), this.errorHandler, validationMode, isNamespaceAware());
|
||||
Document doc = doLoadDocument(inputSource, resource);
|
||||
return registerBeanDefinitions(doc, resource);
|
||||
}
|
||||
catch (BeanDefinitionStoreException ex) {
|
||||
@@ -415,6 +415,20 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actually load the specified document using the configured DocumentLoader.
|
||||
* @param inputSource the SAX InputSource to read from
|
||||
* @param resource the resource descriptor for the XML file
|
||||
* @return the DOM Document
|
||||
* @throws Exception when thrown from the DocumentLoader
|
||||
* @see #setDocumentLoader
|
||||
* @see DocumentLoader#loadDocument
|
||||
*/
|
||||
protected Document doLoadDocument(InputSource inputSource, Resource resource) throws Exception {
|
||||
return this.documentLoader.loadDocument(inputSource, getEntityResolver(), this.errorHandler,
|
||||
getValidationModeForResource(resource), isNamespaceAware());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the validation mode for the specified {@link Resource}. If no explicit
|
||||
@@ -508,12 +522,20 @@ public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {
|
||||
/**
|
||||
* Create the {@link XmlReaderContext} to pass over to the document reader.
|
||||
*/
|
||||
protected XmlReaderContext createReaderContext(Resource resource) {
|
||||
public XmlReaderContext createReaderContext(Resource resource) {
|
||||
return new XmlReaderContext(resource, this.problemReporter, this.eventListener,
|
||||
this.sourceExtractor, this, getNamespaceHandlerResolver());
|
||||
}
|
||||
|
||||
/**
|
||||
* Lazily create a default NamespaceHandlerResolver, if not set before.
|
||||
* @see #createDefaultNamespaceHandlerResolver()
|
||||
*/
|
||||
public NamespaceHandlerResolver getNamespaceHandlerResolver() {
|
||||
if (this.namespaceHandlerResolver == null) {
|
||||
this.namespaceHandlerResolver = createDefaultNamespaceHandlerResolver();
|
||||
}
|
||||
return new XmlReaderContext(resource, this.problemReporter, this.eventListener,
|
||||
this.sourceExtractor, this, this.namespaceHandlerResolver);
|
||||
return this.namespaceHandlerResolver;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2007 the original author or authors.
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,6 +16,12 @@
|
||||
|
||||
package org.springframework.beans.factory.xml;
|
||||
|
||||
import java.io.StringReader;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.xml.sax.InputSource;
|
||||
|
||||
import org.springframework.beans.factory.BeanDefinitionStoreException;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.beans.factory.parsing.ProblemReporter;
|
||||
import org.springframework.beans.factory.parsing.ReaderContext;
|
||||
@@ -83,4 +89,14 @@ public class XmlReaderContext extends ReaderContext {
|
||||
return generatedName;
|
||||
}
|
||||
|
||||
public Document readDocumentFromString(String documentContent) {
|
||||
InputSource is = new InputSource(new StringReader(documentContent));
|
||||
try {
|
||||
return this.reader.doLoadDocument(is, getResource());
|
||||
}
|
||||
catch (Exception ex) {
|
||||
throw new BeanDefinitionStoreException("Failed to read XML document", ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user