java – Spring – 只有当值不为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有很多属性(目前为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。
我在我的生活中已经做了不止一次 – 所以对于我需要的所有可能的类型(大多是原始和一些枚举)来实现它并不是一个重大问题 – 但我希望有一个更智能的解决方案存在。

最佳答案
您可以使用Spel和占位符以及默认值作为占位符机制,如下所示:

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

转载注明原文:java – Spring – 只有当值不为null时才设置属性 - 代码日志