protected void readBeanTypeDef(BeanContainer container, XmlReader reader, LoaderContext context, BeanDefinitionBase bean) {
TypeDefinitionBase def = new TypeDefinitionBase();
String typeClassName = reader.getRequiredAttribute(TYPE_ATTRIBUTE);
Class<?> typeClass = tryForName(typeClassName);
if (null == typeClass) {
throw new BeanDefinitionException("Class '" + typeClassName + "' not found, check source : " + bean.getSource());
}
if (!typeClass.isAssignableFrom(bean.getBeanClass())) {
throw new BeanDefinitionException("bean's type '" + typeClassName + "' must be assignable from bean's class '" + bean.getBeanClass().getName() + "', source : " + reader.getSource());
}
def.setType(typeClass);
def.setName(reader.getAttribute(NAME_ATTRIBUTE));
def.setPrimary(reader.getBooleanAttribute(PRIMARY_ATTRIBUTE, false));
def.setOverride(reader.getBooleanAttribute(OVERRIDE_ATTRIBUTE, context.defaultOverride));
bean.addAdditionalTypeDef(def);
}