Spring - установите свойство, только если значение равно not null

Можно ли при использовании Spring установить свойство только в том случае, если переданное значение не равно NULL?

Пример:

<bean name="myBean" class="some.Type">
   <property name="abc" value="${some.param}"/>
</bean>

Я ищу следующее поведение:

some.Type myBean = new some.Type();
if (${some.param} != null) myBean.setAbc(${some.param});

Причина, по которой я это необходимо, поскольку abc имеет значение по умолчанию, которое я не хочу заменять на null . А создаваемый мной Bean не находится под моим контролем версий, поэтому я не могу изменить его поведение.(Кроме того, abc для этой цели может быть примитивом, поэтому я все равно не могу установить его с помощью null.

РЕДАКТИРОВАТЬ:
Согласно ответам, я думаю, что мой вопрос требует пояснения.

У меня есть bean-компонент, который нужно создать и передать третьему лицу, которое я использую. Этот bean-компонент имеет множество свойств (в настоящее время 12) различных типов ( int , boolean , String и т. Д.)
Каждое свойство имеет значение по умолчанию - я не знаю, что это такое, и предпочел бы не знать, если это не станет проблемой. Я ищу универсальное решение, основанное на возможностях Spring - в настоящее время единственное решение, которое у меня есть, - это рефлексия.

Конфигурация

<bean id="myBean" class="some.TypeWrapper">
   <property name="properties">
     <map>
         <entry key="abc" value="${some.value}"/>
         <entry key="xyz" value="${some.other.value}"/>
         ...
      </map>
   </property>
</bean>

Код

public class TypeWrapper
{
    private Type innerBean;

    public TypeWrapper()
    {
        this.innerBean = new Type();
    }

    public void setProperties(Map<String,String> properties)
    {
        if (properties != null)
        {
            for (Entry<String, Object> entry : properties.entrySet())
            {
                String propertyName = entry.getKey();
                Object propertyValue = entry.getValue();

                setValue(propertyName, propertyValue);
            }
        }
    }

    private void setValue(String propertyName, Object propertyValue)
    {
        if (propertyValue != null)
        {
           Method method = getSetter(propertyName);
           Object value = convertToValue(propertyValue, method.getParameterTypes()[0]);
           method.invoke(innerBean, value);
        }
    }

    private Method getSetter(String propertyName)
    {
      // Assume a valid bean, add a "set" at the beginning and toUpper the 1st character.
      // Scan the list of methods for a method with the same name, assume it is a "valid setter" (i.e. single argument)
      ... 
    }

    private Object convertToValue(String valueAsString, Class type)
    {
        // Check the type for all supported types and convert accordingly
        if (type.equals(Integer.TYPE))
        {
          ...
        }
        else if (type.equals(Integer.TYPE))
        {
          ...
        }
        ...
    }
}

Настоящая «трудность» заключается в реализации convertToValue для всех возможных типов значений. Я делал это не раз в своей жизни, поэтому реализовать это для всех возможных типов, которые мне нужны (в основном для примитивов и нескольких перечислений), не является большой проблемой, но я надеялся, что существует более разумное решение.

23
задан RonK 19 February 2012 в 09:56
поделиться