@Override public Object assemble() { if (getComponentDef().getExpression() != null) { return assembleExpression(); } if (getComponentDef().getArgDefSize() > 0) { return assembleManual(); } return doAssemble(); }
protected Object assembleManual() { final Object[] args = new Object[getComponentDef().getArgDefSize()]; for (int i = 0; i < args.length; ++i) { try { args[i] = getComponentDef().getArgDef(i).getValue(Object.class); } catch (ComponentNotFoundException cause) { throw new IllegalConstructorRuntimeException(getComponentDef().getComponentClass(), cause); } } final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(getComponentDef().getConcreteClass()); return beanDesc.newInstance(args); }
protected Object assembleDefault() { final Constructor<?> constructor = LdiClassUtil.getConstructor(getComponentDef().getConcreteClass(), null); return LdiConstructorUtil.newInstance(constructor, null); } }
protected Object assembleExpression() throws ClassUnmatchRuntimeException { final ComponentDef cd = getComponentDef(); final LaContainer container = cd.getContainer(); final Expression expression = cd.getExpression(); final Object component = expression.evaluate(Collections.emptyMap(), container, Object.class); // #expression_point final Class<?> componentClass = cd.getComponentClass(); if (componentClass != null && !componentClass.isInstance(component)) { throw new ClassUnmatchRuntimeException(componentClass, component != null ? component.getClass() : null); } if (componentClass == null) { // expression lazy type cd.setComponentClass(component.getClass()); // related to sub-class type cd.getContainer().registerByClass(cd); // to get the component by type } return component; }