Example usage for org.springframework.beans.factory.config RuntimeBeanReference RuntimeBeanReference

List of usage examples for org.springframework.beans.factory.config RuntimeBeanReference RuntimeBeanReference

Introduction

In this page you can find the example usage for org.springframework.beans.factory.config RuntimeBeanReference RuntimeBeanReference.

Prototype

public RuntimeBeanReference(Class<?> beanType, boolean toParent) 

Source Link

Document

Create a new RuntimeBeanReference to a bean of the given type, with the option to mark it as reference to a bean in the parent factory.

Usage

From source file:grails.plugin.cache.CacheBeanPostProcessor.java

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
    log.info("postProcessBeanDefinitionRegistry start");

    AbstractBeanDefinition beanDef = findBeanDefinition(registry);
    if (beanDef == null) {
        log.error("Unable to find the AnnotationCacheOperationSource bean definition");
        return;/*ww  w .ja v  a 2  s. c  om*/
    }

    // change the class to the plugin's subclass
    beanDef.setBeanClass(GrailsAnnotationCacheOperationSource.class);

    // wire in the dependency for the grailsApplication
    MutablePropertyValues props = beanDef.getPropertyValues();
    if (props == null) {
        props = new MutablePropertyValues();
        beanDef.setPropertyValues(props);
    }
    props.addPropertyValue("grailsApplication", new RuntimeBeanReference("grailsApplication", true));

    log.debug("updated {}", beanDef);
}

From source file:hudson.util.spring.BeanBuilder.java

public RuntimeBeanReference ref(String refName, boolean parentRef) {
    return new RuntimeBeanReference(refName, parentRef);
}

From source file:grails.spring.BeanBuilder.java

/**
 * Overrides method invocation to create beans for each method name that takes a class argument.
 *///w ww.  j ava  2 s  .  com
@Override
public Object invokeMethod(String name, Object arg) {
    Object[] args = (Object[]) arg;

    if (CREATE_APPCTX.equals(name)) {
        return createApplicationContext();
    }

    if (REGISTER_BEANS.equals(name) && args.length == 1 && args[0] instanceof GenericApplicationContext) {
        registerBeans((GenericApplicationContext) args[0]);
        return null;
    }

    if (BEANS.equals(name) && args.length == 1 && args[0] instanceof Closure) {
        return beans((Closure<?>) args[0]);
    }

    if (REF.equals(name)) {
        String refName;
        Assert.notNull(args[0], "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();
        }

        boolean parentRef = false;
        if (args.length > 1) {
            if (args[1] instanceof Boolean) {
                parentRef = (Boolean) args[1];
            }
        }
        return new RuntimeBeanReference(refName, parentRef);
    }

    if (namespaceHandlers.containsKey(name) && args.length > 0 && (args[0] instanceof Closure)) {
        createDynamicElementReader(name, true).invokeMethod("doCall", args);
        return this;
    }

    if (args.length > 0 && args[0] instanceof Closure) {
        // abstract bean definition
        return invokeBeanDefiningMethod(name, args);
    }

    if (args.length > 0 && args[0] instanceof Class
            || args.length > 0 && args[0] instanceof RuntimeBeanReference
            || args.length > 0 && args[0] instanceof Map) {
        return invokeBeanDefiningMethod(name, args);
    }

    if (args.length > 1 && args[args.length - 1] instanceof Closure) {
        return invokeBeanDefiningMethod(name, args);
    }

    ApplicationContext ctx = springConfig.getUnrefreshedApplicationContext();
    MetaClass mc = DefaultGroovyMethods.getMetaClass(ctx);
    if (!mc.respondsTo(ctx, name, args).isEmpty()) {
        return mc.invokeMethod(ctx, name, args);
    }

    return this;
}

From source file:hudson.util.spring.BeanBuilder.java

/**
 * This method overrides property retrieval in the scope of the BeanBuilder to either:
 *
 * a) Retrieve a variable from the bean builder's binding if it exits
 * b) Retrieve a RuntimeBeanReference for a specific bean if it exists
 * c) Otherwise just delegate to super.getProperty which will resolve properties from the BeanBuilder itself
 *///ww  w . ja  v a  2s.c o m
public Object getProperty(String name) {
    if (binding.containsKey(name)) {
        return binding.get(name);
    } else {
        if (springConfig.containsBean(name)) {
            BeanConfiguration beanConfig = springConfig.getBeanConfig(name);
            if (beanConfig != null) {
                return new ConfigurableRuntimeBeanReference(name, springConfig.getBeanConfig(name), false);
            } else
                return new RuntimeBeanReference(name, false);
        }
        // this is to deal with the case where the property setter is the last
        // statement in a closure (hence the return value)
        else if (currentBeanConfig != null) {
            if (currentBeanConfig.hasProperty(name))
                return currentBeanConfig.getPropertyValue(name);
            else {
                DeferredProperty dp = deferredProperties.get(currentBeanConfig.getName() + name);
                if (dp != null) {
                    return dp.value;
                } else {
                    return super.getProperty(name);
                }
            }
        } else {
            return super.getProperty(name);
        }
    }
}

From source file:grails.spring.BeanBuilder.java

/**
 * Overrides property retrieval in the scope of the BeanBuilder to either:
 *
 * a) Retrieve a variable from the bean builder's binding if it exists
 * b) Retrieve a RuntimeBeanReference for a specific bean if it exists
 * c) Otherwise just delegate to super.getProperty which will resolve properties from the BeanBuilder itself
 *//*from   www  . j  a  v  a  2 s .co m*/
@Override
public Object getProperty(String name) {

    if (binding.containsKey(name)) {
        return binding.get(name);
    }

    if (namespaceHandlers.containsKey(name)) {
        return createDynamicElementReader(name, currentBeanConfig != null);
    }

    if (springConfig.containsBean(name)) {
        BeanConfiguration beanConfig = springConfig.getBeanConfig(name);
        if (beanConfig != null) {
            return new ConfigurableRuntimeBeanReference(name, springConfig.getBeanConfig(name), false);
        }
        return new RuntimeBeanReference(name, false);
    }

    // this is to deal with the case where the property setter is the last
    // statement in a closure (hence the return value)
    if (currentBeanConfig != null) {
        if (currentBeanConfig.hasProperty(name)) {
            return currentBeanConfig.getPropertyValue(name);
        }
        DeferredProperty dp = deferredProperties.get(currentBeanConfig.getName() + name);
        if (dp != null) {
            return dp.value;
        }
        return super.getProperty(name);
    }

    return super.getProperty(name);
}

From source file:org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader.java

/**
 * This method overrides method invocation to create beans for each method name that
 * takes a class argument.//from  w  ww . j av a  2  s . com
 */
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]);
    } 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();
        }
        boolean parentRef = false;
        if (args.length > 1) {
            if (args[1] instanceof Boolean) {
                parentRef = (Boolean) args[1];
            }
        }
        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 (args.length > 0 && args[0] instanceof Closure) {
        // 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);
    } 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;
}

From source file:org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader.java

/**
 * This method overrides property retrieval in the scope of the
 * {@code GroovyBeanDefinitionReader} to either:
 * <ul>//from  w w w .java2s .  c o m
 * <li>Retrieve a variable from the bean builder's binding if it exists
 * <li>Retrieve a RuntimeBeanReference for a specific bean if it exists
 * <li>Otherwise just delegate to MetaClass.getProperty which will resolve
 * properties from the {@code GroovyBeanDefinitionReader} itself
 * </ul>
 */
public Object getProperty(String name) {
    Binding binding = getBinding();
    if (binding != null && binding.hasVariable(name)) {
        return binding.getVariable(name);
    } else {
        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);
            }
        }
        // This is to deal with the case where the property setter is the last
        // statement in a closure (hence the return value)
        else if (this.currentBeanDefinition != null) {
            MutablePropertyValues pvs = this.currentBeanDefinition.getBeanDefinition().getPropertyValues();
            if (pvs.contains(name)) {
                return pvs.get(name);
            } else {
                DeferredProperty dp = this.deferredProperties
                        .get(this.currentBeanDefinition.getBeanName() + name);
                if (dp != null) {
                    return dp.value;
                } else {
                    return getMetaClass().getProperty(this, name);
                }
            }
        } else {
            return getMetaClass().getProperty(this, name);
        }
    }
}

From source file:org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.java

/**
 * Parse a value, ref or collection sub-element of a property or
 * constructor-arg element./*from w ww.j  ava 2s  . com*/
 * @param ele subelement of property element; we don't know which yet
 * @param defaultValueType the default type (class name) for any
 * {@code <value>} tag that might be created
 */
@Nullable
public Object parsePropertySubElement(Element ele, @Nullable BeanDefinition bd,
        @Nullable String defaultValueType) {
    if (!isDefaultNamespace(ele)) {
        return parseNestedCustomElement(ele, bd);
    } else if (nodeNameEquals(ele, BEAN_ELEMENT)) {
        BeanDefinitionHolder nestedBd = parseBeanDefinitionElement(ele, bd);
        if (nestedBd != null) {
            nestedBd = decorateBeanDefinitionIfRequired(ele, nestedBd, bd);
        }
        return nestedBd;
    } else if (nodeNameEquals(ele, REF_ELEMENT)) {
        // A generic reference to any name of any bean.
        String refName = ele.getAttribute(BEAN_REF_ATTRIBUTE);
        boolean toParent = false;
        if (!StringUtils.hasLength(refName)) {
            // A reference to the id of another bean in a parent context.
            refName = ele.getAttribute(PARENT_REF_ATTRIBUTE);
            toParent = true;
            if (!StringUtils.hasLength(refName)) {
                error("'bean' or 'parent' is required for <ref> element", ele);
                return null;
            }
        }
        if (!StringUtils.hasText(refName)) {
            error("<ref> element contains empty target attribute", ele);
            return null;
        }
        RuntimeBeanReference ref = new RuntimeBeanReference(refName, toParent);
        ref.setSource(extractSource(ele));
        return ref;
    } else if (nodeNameEquals(ele, IDREF_ELEMENT)) {
        return parseIdRefElement(ele);
    } else if (nodeNameEquals(ele, VALUE_ELEMENT)) {
        return parseValueElement(ele, defaultValueType);
    } else if (nodeNameEquals(ele, NULL_ELEMENT)) {
        // It's a distinguished null value. Let's wrap it in a TypedStringValue
        // object in order to preserve the source location.
        TypedStringValue nullHolder = new TypedStringValue(null);
        nullHolder.setSource(extractSource(ele));
        return nullHolder;
    } else if (nodeNameEquals(ele, ARRAY_ELEMENT)) {
        return parseArrayElement(ele, bd);
    } else if (nodeNameEquals(ele, LIST_ELEMENT)) {
        return parseListElement(ele, bd);
    } else if (nodeNameEquals(ele, SET_ELEMENT)) {
        return parseSetElement(ele, bd);
    } else if (nodeNameEquals(ele, MAP_ELEMENT)) {
        return parseMapElement(ele, bd);
    } else if (nodeNameEquals(ele, PROPS_ELEMENT)) {
        return parsePropsElement(ele);
    } else {
        error("Unknown property sub-element: [" + ele.getNodeName() + "]", ele);
        return null;
    }
}

From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java

/**
 * Parse a value, ref or collection sub-element of a property or
 * constructor-arg element./*from  ww w . j  a  v  a  2 s.c  om*/
 * @param ele subelement of property element; we don't know which yet
 */
protected Object parsePropertySubElement(Element ele, String beanName) throws BeanDefinitionStoreException {
    if (ele.getTagName().equals(BEAN_ELEMENT)) {
        try {
            return parseBeanDefinitionElement(ele, true);
        } catch (BeanDefinitionStoreException ex) {
            throw new BeanDefinitionStoreException(getResource(), beanName,
                    "Could not parse inner bean definition", ex);
        }
    } else if (ele.getTagName().equals(REF_ELEMENT)) {
        // A generic reference to any name of any bean.
        String refName = ele.getAttribute(BEAN_REF_ATTRIBUTE);
        boolean toParent = false;
        if (!StringUtils.hasLength(refName)) {
            // A reference to the id of another bean in the same XML file.
            refName = ele.getAttribute(LOCAL_REF_ATTRIBUTE);
            if (!StringUtils.hasLength(refName)) {
                // A reference to the id of another bean in a parent context.
                refName = ele.getAttribute(PARENT_REF_ATTRIBUTE);
                toParent = true;
                if (!StringUtils.hasLength(refName)) {
                    throw new BeanDefinitionStoreException(getResource(), beanName,
                            "'bean', 'local' or 'parent' is required for <ref> element");
                }
            }
        }
        if (!StringUtils.hasText(refName)) {
            throw new BeanDefinitionStoreException(getResource(), beanName,
                    "<ref> element contains empty target attribute");
        }
        return new RuntimeBeanReference(refName, toParent);
    } else if (ele.getTagName().equals(IDREF_ELEMENT)) {
        // A generic reference to any name of any bean.
        String beanRef = ele.getAttribute(BEAN_REF_ATTRIBUTE);
        if (!StringUtils.hasLength(beanRef)) {
            // A reference to the id of another bean in the same XML file.
            beanRef = ele.getAttribute(LOCAL_REF_ATTRIBUTE);
            if (!StringUtils.hasLength(beanRef)) {
                throw new BeanDefinitionStoreException(getResource(), beanName,
                        "Either 'bean' or 'local' is required for <idref> element");
            }
        }
        return beanRef;
    } else if (ele.getTagName().equals(VALUE_ELEMENT)) {
        // It's a literal value.
        String value = DomUtils.getTextValue(ele);
        if (ele.hasAttribute(TYPE_ATTRIBUTE)) {
            String typeClassName = ele.getAttribute(TYPE_ATTRIBUTE);
            try {
                Class typeClass = ClassUtils.forName(typeClassName,
                        this.beanDefinitionReader.getBeanClassLoader());
                return new TypedStringValue(value, typeClass);
            } catch (ClassNotFoundException ex) {
                throw new BeanDefinitionStoreException(getResource(), beanName,
                        "Type class [" + typeClassName + "] not found for <value> element", ex);
            }
        }
        return value;
    } else if (ele.getTagName().equals(NULL_ELEMENT)) {
        // It's a distinguished null value.
        return null;
    } else if (ele.getTagName().equals(LIST_ELEMENT)) {
        return parseListElement(ele, beanName);
    } else if (ele.getTagName().equals(SET_ELEMENT)) {
        return parseSetElement(ele, beanName);
    } else if (ele.getTagName().equals(MAP_ELEMENT)) {
        return parseMapElement(ele, beanName);
    } else if (ele.getTagName().equals(PROPS_ELEMENT)) {
        return parsePropsElement(ele, beanName);
    }
    throw new BeanDefinitionStoreException(getResource(), beanName,
            "Unknown property sub-element: <" + ele.getTagName() + ">");
}

From source file:org.springframework.context.groovy.GroovyBeanDefinitionReader.java

/**
* This method overrides method invocation to create beans for each method name that
* takes a class argument//  w w w  .  j ava2s . co m
*/
public Object invokeMethod(String name, Object arg) {
    Object[] args = (Object[]) arg;

    if (CREATE_APPCTX.equals(name)) {
        return createApplicationContext();
    } else if (REGISTER_BEANS.equals(name) && args.length == 1
            && args[0] instanceof GenericApplicationContext) {
        registerBeans((GenericApplicationContext) args[0]);
        return null;
    } else 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();
        }

        boolean parentRef = false;
        if (args.length > 1) {
            if (args[1] instanceof Boolean) {
                parentRef = (Boolean) args[1];
            }
        }
        return new RuntimeBeanReference(refName, parentRef);
    } else if (namespaceHandlers.containsKey(name) && args.length > 0 && (args[0] instanceof Closure)) {
        DynamicElementReader reader = createDynamicElementReader(name, true);
        reader.invokeMethod("doCall", args);
    } else if (args.length > 0 && args[0] instanceof Closure) {
        // abstract bean definition
        return invokeBeanDefiningMethod(name, args);
    } else if (args.length > 0 && args[0] instanceof Class
            || args.length > 0 && args[0] instanceof RuntimeBeanReference
            || args.length > 0 && args[0] instanceof Map) {
        return invokeBeanDefiningMethod(name, args);
    } else if (args.length > 1 && args[args.length - 1] instanceof Closure) {
        return invokeBeanDefiningMethod(name, args);
    }
    ApplicationContext ctx = springConfig.getUnrefreshedApplicationContext();
    MetaClass mc = DefaultGroovyMethods.getMetaClass(ctx);
    if (!mc.respondsTo(ctx, name, args).isEmpty()) {
        return mc.invokeMethod(ctx, name, args);
    }

    return this;
}