List of usage examples for org.springframework.beans.factory.support RootBeanDefinition overrideFrom
public void overrideFrom(BeanDefinition other)
From source file:org.rosenvold.spring.convention.ConventionBeanFactory.java
@Override protected synchronized RootBeanDefinition getMergedLocalBeanDefinition(String beanName) throws BeansException { if (super.containsBeanDefinition(beanName)) { return super.getMergedLocalBeanDefinition(beanName); }// w ww . j av a 2 s . c o m final Class<?> type = getResolvedType(beanName); if (type != null) { RootBeanDefinition rootBeanDefinition = mergedBeanDefinitions.get(type); if (rootBeanDefinition == null) { rootBeanDefinition = new RootBeanDefinition(type); rootBeanDefinition.overrideFrom(getBeanDefinition(beanName)); // Are these next two really necessary ??? rootBeanDefinition.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); rootBeanDefinition.setScope(getAnnotatedScope(type)); mergedBeanDefinitions.put(type, rootBeanDefinition); } return rootBeanDefinition; } return null; }
From source file:org.springframework.beans.factory.support.AbstractBeanFactory.java
/** * Return a RootBeanDefinition for the given top-level bean, by merging with * the parent if the given bean's definition is a child bean definition. * @param beanName the name of the bean definition * @param bd the original bean definition (Root/ChildBeanDefinition) * @return a (potentially merged) RootBeanDefinition for the given bean * @throws BeanDefinitionStoreException in case of an invalid bean definition *///w ww . j a va 2s . c o m protected RootBeanDefinition getMergedBeanDefinition(String beanName, BeanDefinition bd) throws BeanDefinitionStoreException { if (bd instanceof RootBeanDefinition) { // Return root bean definition as-is. return (RootBeanDefinition) bd; } else if (bd instanceof ChildBeanDefinition) { // Child bean definition: needs to be merged with parent. ChildBeanDefinition cbd = (ChildBeanDefinition) bd; RootBeanDefinition pbd = null; try { if (!beanName.equals(cbd.getParentName())) { pbd = getMergedBeanDefinition(cbd.getParentName(), true); } else { if (getParentBeanFactory() instanceof AbstractBeanFactory) { AbstractBeanFactory parentFactory = (AbstractBeanFactory) getParentBeanFactory(); pbd = parentFactory.getMergedBeanDefinition(cbd.getParentName(), true); } else { throw new NoSuchBeanDefinitionException(cbd.getParentName(), "Parent name '" + cbd.getParentName() + "' is equal to bean name '" + beanName + "': cannot be resolved without an AbstractBeanFactory parent"); } } } catch (NoSuchBeanDefinitionException ex) { throw new BeanDefinitionStoreException(cbd.getResourceDescription(), beanName, "Could not resolve parent bean definition '" + cbd.getParentName() + "'", ex); } // Deep copy with overridden values. RootBeanDefinition rbd = new RootBeanDefinition(pbd); rbd.overrideFrom(cbd); // Validate merged definition: mainly to prepare method overrides. try { rbd.validate(); } catch (BeanDefinitionValidationException ex) { throw new BeanDefinitionStoreException(rbd.getResourceDescription(), beanName, "Validation of bean definition failed", ex); } return rbd; } else { throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanName, "Definition is neither a RootBeanDefinition nor a ChildBeanDefinition"); } }