从参考bean

时间:2019-07-17 07:12:48

标签: java spring spring-el

我正在尝试从引用bean获取映射键值。

我有两节课。一个包含两个Map,另一个需要从此类读取键值并设置一个自己的字段。

@Data
public class ClassOne{

    private Map<String, Object> xxx;
    private Map<String, Object> yyy;

}
@Data
public class ClassTwo{
    private String zzz;
}

xml应用程序上下文

<bean id="ClassTwo" class="...">
<property name="zzz" value="#{ClassOne.${xxx['key']} == 'myString' ? 'otherString' : false}"></property>
</bean>

<bean id="ClassOne" class="...">
<property name="xxx" value=""></property>
</bean>

我的意图是引用bean ClassOne获取一个Map并通过键获取Map值

{ClassOne。$ {xxx ['key']}} =='myString'吗? 'otherString':false}

编辑:

对于此应用程序上下文,我正在获得

   <bean id="ClassTwo" class="com.interns.pittaci.model.label.ClassTwo">
        <!--- for property name zzz from ClassTwo set value based on map called xxx with key 'test' inside ClassOne -->
        <property name="zzz" value="#{ClassOne.${xxx['test']} == 'test' ? 'test1 ' : test2}"></property>
    </bean>

以下错误消息:

  

线程“主”中的异常   org.springframework.beans.factory.BeanDefinitionStoreException:   在类路径中定义了名称为“ ClassTwo”的无效bean定义   资源[applicationContext.xml]:无法解析占位符   值“#{ClassOne。$ {xxx ['test']}} =='test'?'test1'中的'xxx ['test']'   :test2}“;嵌套异常是java.lang.IllegalArgumentException:   无法解析占位符'xxx ['test']'的值   “#{ClassOne。$ {xxx ['test']}} =='test'?'test1':test2}”

1 个答案:

答案 0 :(得分:0)

我认为问题在于访问地图时使用了$ {},因为访问类属性时不必使用$ {}。尝试#{ClassOne.xxx['key'] == 'myString' ? 'otherString' : false}

除此之外,在映射中不存在键的情况下,application-context.xml中定义的三元运算符将返回一个布尔值,并尝试将其分配给String属性