【问题标题】:Refering properties of properties in Spring XML at RHS?在 RHS 的 Spring XML 中引用属性的属性?
【发布时间】:2012-10-01 10:59:42
【问题描述】:

Spring XML 中有复合属性名称,但我找不到复合属性值。

假设我有Person getter,其原型如下:

class Person {
   Person getFather();
   void setFather(Person value);
   String getAge();
   void setAge(String value);
   ...
}

Company 原型如下:

class Company {
   Person getOwner();
   void setOwner(Person value);
   ...
}

我可以将这些与类似的东西联系起来

<bean id="Bob" class="Person"/>

<bean id="Barnyard" class="Company">
   <property name="owner" ref="Bob.father"/>
</bean>

上面说“没有Bob.father id 的bean”不起作用。

下面的也行不通

<bean id="Barnyard" class="Company">
   <property name="owner" value="Bob.father"/>
</bean>

无法将String 转换为Person

如何实现?

更新

假设我想设置公司所有者的年龄。显然我应该这样写:

<bean id="Barnyard" class="Company">
   <property name="owner" value="#{Bob.father}"/>
   <property name="owner.age" value="38"/>
</bean>

当我可以在 LEFT 使用属性的属性但不能在 RIGHT 做同样的事情时,这不是一个糟糕的设计吗??

【问题讨论】:

    标签: java xml spring javabeans applicationcontext


    【解决方案1】:

    Spring EL 也可以在这里工作,甚至比你的问题更简洁 previously -

    <bean id="Barnyard" class="Company">
       <property name="owner" value="#{Bob.father}"/>
    </bean>
    

    【讨论】:

    • 我不明白为什么左边没有EL可以工作,而右边却不行。
    • 当您指定&lt;bean id="barnyard"..&gt; &lt;property name="owner" value=".."&gt; 时,基本上Spring 所做的就是以这种方式调用owner 属性上的setter,barnyard.setOwner(..),现在如果您想引用另一个bean,您可以使用@ 987654327@,但是如果你想解析另一个 bean 中的某个字段,那么唯一的选择就是像 Spring-El 这样的东西,它可以评估像上面定义的表达式来解析 getFatherBob bean。更多细节在这里static.springsource.org/spring/docs/3.1.x/…
    • 我可以写&lt;property name="owner.age" value="35"/&gt;,即我可以参考左边的属性。虽然 EL 需要在 RIGHT 做同样的事情。我猜这是糟糕的设计。
    猜你喜欢
    • 2012-10-21
    • 2012-12-24
    • 2018-09-28
    • 2019-10-15
    • 2013-04-09
    • 1970-01-01
    • 2018-07-10
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多