List of usage examples for org.springframework.beans.factory.support RootBeanDefinition validate
public void validate() throws BeanDefinitionValidationException
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 *//*from w w w .ja va 2 s .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"); } }