protected Object doCreateBean( ValueDefinition vd){ Object definedValue = vd.getDefinedValue(); if(null == definedValue){ throw new IllegalStateException("The defined value must not be null"); } if(definedValue instanceof BeanReference){ return doGetBeanReferenceInstance((BeanReference)definedValue); }else if(definedValue instanceof BeanDefinitionBase){ return doGetBean((BeanDefinitionBase)definedValue); } throw new IllegalStateException("The value definition must be bean reference or bean definition"); }
@Override public Object get() { Object definedArray = vd.getDefinedValue(); Object createdArray = null; int arrayLength = Array.getLength(definedArray); createdArray = Array.newInstance(definedArray.getClass().getComponentType(), arrayLength); for(int i=0;i<arrayLength;i++){ Object element = Array.get(definedArray, i); Object value = element instanceof ValueDefinition ? doResolveValue(bd, (ValueDefinition)element, null) : element; Array.set(createdArray, i, doConvertValue(value, vd.getDefinedElementType())); } return createdArray; } };
@SuppressWarnings("unchecked") protected Collection<Object> createCollection(BeanDefinitionBase bd, ValueDefinition vd,Collection<Object> col){ try { Class<?> definedType = vd.getDefinedType(); if(definedType != null){ if(definedType.isInterface() || Modifier.isAbstract(definedType.getModifiers())){ boolean isAssignableFrom = definedType.isAssignableFrom(vd.getDefinedValue().getClass()); if(!isAssignableFrom){ throw new BeanDefinitionException("Error create instance of collection type '" + vd.getDefinedType() + "' bean " + bd + " cause "+definedType+" is interface or abstract class and the value type " + vd.getDefinedValue().getClass().getName() + " is not the subclass of "+definedType); }else{ definedType = vd.getDefinedValue().getClass(); } } return (Collection<Object>)Reflection.newInstance(definedType); } } catch (ReflectException e) { throw new BeanDefinitionException("Error create instance of collection type '" + vd.getDefinedType() + "' bean " + bd, e); } if(col instanceof List){ return new ArrayList<Object>(); }else if(col instanceof Set){ return new ArrayList<Object>(); }else{ throw new BeanDefinitionException("Invalid collection type '" + col.getClass().getName() + "', only 'list' and 'set' are supported, please check the bean " + bd); } }
@Override public Collection get() { Collection definedCol = (Collection)vd.getDefinedValue(); Collection createdCol = createCollection(bd, vd,definedCol); for(Object element : definedCol){ Object value = element instanceof ValueDefinition ? doResolveValue(bd, (ValueDefinition)element, null) : element; createdCol.add(doConvertValue(value, vd.getDefinedElementType())); } return createdCol; } };
@Override public Object get() { Map definedMap = (Map)vd.getDefinedValue(); Map createdMap = null; Class<?> clzz = vd.getDefinedType(); if(clzz.isInterface() || Modifier.isAbstract(clzz.getModifiers())){ boolean isAssignableFrom = clzz.isAssignableFrom(vd.getDefinedValue().getClass()); if(!isAssignableFrom){ throw new BeanDefinitionException("Error create instance of collection type '" + vd.getDefinedType() + "' bean " + bd + " cause "+clzz+" is interface or abstract class and the value type " + vd.getDefinedValue().getClass().getName() + " is not the subclass of "+clzz); }else{ clzz = vd.getDefinedValue().getClass();
if(null != bld){ for(ValueDefinition vd : bld.getValues()){ Object v = vd.getDefinedValue(); if(v instanceof BeanDefinition && !((BeanDefinition)v).isSingleton()) { cache = false;
if (valType == null && vd.getDefinedValue() != null) { valType = vd.getDefinedValue().getClass(); BeanReference beanRef = (BeanReference) vd.getDefinedValue(); if (beanRef.getTargetBeanDefinition() != null) { Class<?> refCls = beanRef.getTargetBeanDefinition().getSource().getClass(); BeanDefinitionBase bd = (BeanDefinitionBase) vd.getDefinedValue(); Class<?> definedType = bd.getBeanClass(); if (definedType == null) {
Object definedValue = vd.getDefinedValue();