protected void addAliasDefinition(AliasDefinition ad){ if(!Strings.isEmpty(ad.getId())){ AliasDefinition existsAliasDefinition = bds.aliasDefinitions.get(ad.getAlias()); if(null != existsAliasDefinition){ throw new BeanDefinitionException("Found duplicated bean alias '" + ad.getAlias() + "' in resource : " + ad.getSource() + ", " + ad.getSource()); } bds.aliasDefinitions.put(ad.getAlias(),ad); }else{ String key = ad.getType().getName() + "$" + ad.getAlias(); AliasDefinition existsAliasDefinition = bds.aliasDefinitions.get(key); if(null != existsAliasDefinition){ throw new BeanDefinitionException("Found duplicated bean alias '" + key + "' in resource : " + ad.getSource() + ", " + ad.getSource()); } bds.aliasDefinitions.put(key,ad); } }
protected BeanDefinitionBase find(Class<?> beanType, String name){ String key = beanType.getName() + "$" + name; BeanDefinitionBase bd = namedBeanDefinitions.get(key); if(null == bd){ AliasDefinition ad = aliasDefinitions.get(key); if(null != ad){ bd = namedBeanDefinitions.get(ad.getType().getName() + "$" + ad.getName()); } } return bd; }
@Override public void addAlias(Class<?> type, String name, String alias) { ensureAppNotInited(); addAliasDefinition(new AliasDefinition("runtime", alias, type, name)); }
protected BeanDefinitionBase findBeanOrAliasDefinition(String id){ BeanDefinitionBase bd = bds.identifiedBeanDefinitions.get(id); if(null == bd){ AliasDefinition ad = bds.aliasDefinitions.get(id); if(null != ad){ bd = bds.identifiedBeanDefinitions.get(ad.getId()); } } return bd; }
protected AliasDefinition readAlias(BeanContainer container, XmlReader reader, LoaderContext context) { String alias = reader.getRequiredAttribute(ALIAS_ATTRIBUTE); String id = reader.getAttribute(ID_ATTRIBUTE); if (!Strings.isEmpty(id)) { return new AliasDefinition(reader.getSource(), alias, id); } return new AliasDefinition(reader.getSource(), alias, forName(reader.getRequiredAttribute(TYPE_ATTRIBUTE)), reader.getRequiredAttribute(NAME_ATTRIBUTE) ); }
protected void checkAfterLoading(){ for(AliasDefinition aliasDefinition : bds.aliasDefinitions.values()){ if(!Strings.isEmpty(aliasDefinition.getId())){ if(null == findBeanDefinition(aliasDefinition.getId())){ throw new BeanDefinitionException("bean id '" + aliasDefinition.getId() + "' defined in alias '" + aliasDefinition.getAlias() + "' not found, source : " + aliasDefinition.getSource()); BeanDefinitionBase bean = findBeanDefinition(aliasDefinition.getAlias()); if(null != bean){ throw new BeanDefinitionException("the alias name '" + aliasDefinition.getAlias() + "' aleady used by another bean, please check the xmls : " + aliasDefinition.getSource() + "," + bean.getSource()); if(null == findBeanDefinition(aliasDefinition.getType(),aliasDefinition.getName())){ throw new BeanDefinitionException("Bean name '" + aliasDefinition.getName() + "' defined in alias '" + aliasDefinition.getAlias() + "' not found, source : " + aliasDefinition.getSource()); BeanDefinitionBase bean = findBeanDefinition(aliasDefinition.getType(),aliasDefinition.getAlias()); if(null != bean){ throw new BeanDefinitionException("The alias name '" + aliasDefinition.getAlias() + "' aleady used by another bean, please check the xmls : " + aliasDefinition.getSource() + "," + bean.getSource());