private void addAttributes(
      final JBossServiceAttributeConfig[] attributeConfigs,
      final List<ClassReflectionIndex> mBeanClassHierarchy,
      final MBeanServices mBeanServices,
      final ClassLoader classLoader)
      throws DeploymentUnitProcessingException {
    if (attributeConfigs != null) {
      final Service<Object> createDestroyService = mBeanServices.getCreateDestroyService();
      for (final JBossServiceAttributeConfig attributeConfig : attributeConfigs) {
        final String propertyName = attributeConfig.getName();
        final Inject injectConfig = attributeConfig.getInject();
        final ValueFactory valueFactoryConfig = attributeConfig.getValueFactory();

        if (injectConfig != null) {
          final Value<?> value = getValue(injectConfig, mBeanClassHierarchy);
          final Injector<Object> injector =
              getPropertyInjector(propertyName, mBeanClassHierarchy, createDestroyService, value);
          mBeanServices.addAttribute(injectConfig.getBeanName(), injector);
        } else if (valueFactoryConfig != null) {
          final Value<?> value = getValue(valueFactoryConfig, mBeanClassHierarchy, classLoader);
          final Injector<Object> injector =
              getPropertyInjector(propertyName, mBeanClassHierarchy, createDestroyService, value);
          mBeanServices.addAttribute(valueFactoryConfig.getBeanName(), injector);
        } else {
          final Value<?> value = getValue(attributeConfig, mBeanClassHierarchy);
          final Injector<Object> injector =
              getPropertyInjector(
                  propertyName, mBeanClassHierarchy, createDestroyService, Values.injectedValue());
          mBeanServices.addInjectionValue(injector, value);
        }
      }
    }
  }
 private static Value<?> getValue(
     final Inject injectConfig, final List<ClassReflectionIndex> mBeanClassHierarchy) {
   final String propertyName = injectConfig.getPropertyName();
   Value<?> valueToInject = Values.injectedValue();
   if (propertyName != null) {
     final Method getter = ReflectionUtils.getGetter(mBeanClassHierarchy, propertyName);
     final Value<Method> getterValue = new ImmediateValue<Method>(getter);
     valueToInject =
         cached(new MethodValue<Object>(getterValue, valueToInject, Values.<Object>emptyList()));
   }
   return valueToInject;
 }