使用Spring时,只有在传递的值不为null时才可以设置属性吗?
例:
<bean name="myBean" class="some.Type">
<property name="abc" value="${some.param}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
我正在寻找的行为是:
some.Type myBean = new some.Type();
if (${some.param} != null) myBean.setAbc(${some.param});
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因是因为abc有一个默认值,我不想用a覆盖null.我正在创建的Bean不在我的源代码控制之下 - 所以我无法改变它的行为.(另外,abc为此目的可能是原始的,所以无论如何我都不能用null设置它.
编辑:
根据答案,我认为我的问题需要澄清.
我有bean我需要实例化并传递给我使用的第三方.这个bean拥有各类(的许多特性(目前12) ,,int 等),
每个属性都有一个默认值-我不知道它是什么,宁愿不需要知道,除非它成为一个问题.我正在寻找的是一个来自Spring的能力的通用解决方案 - 目前我唯一的解决方案是基于反射.booleanString
组态
<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>
Run Code Online (Sandbox Code Playgroud)
码
public class TypeWrapper
{
private Type innerBean;
public TypeWrapper()
{
this.innerBean = new Type();
}
public void setProperties(Map<String,String> properties)
{
if (properties …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用ContextLoaderListener从许多jar加载上下文文件:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/contextBeans.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
这意味着我可以在不进行导入的情况下从其他jar中引用bean.
在应用程序中有多个部署选项,在某些部署中可以排除jar.为了支持我,我希望一些bean引用是可选的.例如:
<bean id="mainAppBean" class="com.someapp.MyApplication">
<constructor-arg index="0" ref="localBean"/>
<constructor-arg index="1" ref="optionalBeanReference1"/>
<constructor-arg index="2" ref="optionalBeanReference2"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我想如果找不到引用,则optionalBeanReference1等于null(以某种方式将其标记为可选)
这可以在Spring完成吗?或者您推荐哪种方法来处理动态参考?