【问题标题】:Defining a hashmap as a bean将 hashmap 定义为 bean
【发布时间】:2015-10-26 10:04:30
【问题描述】:

我正在尝试将 HashMap 定义为蓝图 xml 上的 bean。原来的问题是我有

<bean id="class1" class="com.acme.Class1">
  <property name="acmeMap">
    <map>
      <entry-key="coyotte" value="Poor Fellow"/>
      <entry-key="roadRunner" value="Sadistic Bird"/>
    </map>
  </property>
</bean>

而且效果很好。问题是当我在同一个蓝图 xml 文件上还有另一个扩展 Class1 的类时,例如 Class1a。

<bean id="class1a" class="com.acme.Class1a">
  <property name="acmeMap">
    <map>
      <entry-key="coyotte" value="Poor Fellow"/>
      <entry-key="roadRunner" value="Sadistic Bird"/>
    </map>
  </property>
</bean>

这意味着定义地图两次并且必须在蓝图 xml 中维护它。有没有办法实例化,例如,像

 <bean id="acmeMap" class="java.util.HashMap"/> 

并使用我需要的值对其进行初始化,然后在其他 bean 上导入引用?这意味着 acmeMap 只创建一次。我确实在互联网上搜索了初始化蓝图 bean 映射的示例,但找不到。或者也许解决方案是别的?

【问题讨论】:

    标签: java xml hashmap osgi blueprint-osgi


    【解决方案1】:

    您可以使用父标签来指定继承并获得对类中定义的属性的控制。您可以重复使用相同的或定义新的。您可以参考以下示例。

    <bean id="bean1" class="MyBean">
        <property name="attrib1" value="val1" />
        <property name="attrib2" value="val2" />
    </bean>
    <bean id="bean2" parent="bean1">
        <property name="attrib3" value="val3" />
        <property name="attrib4" value="val4" />
    </bean>
    

    【讨论】:

    • 如果我理解正确的话,这意味着“bean2”有 4 个属性(来自父级的 2 个加上其他定义的 2 个)?
    • 是的,您理解正确。 Bean 2 将具有 4 个属性。您可以将其与简单 Java 继承概念联系起来。
    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 2011-10-10
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多