繁体   English   中英

动态注入地图

[英]Dynamically Injecting a Map

我有一个名为someMap的以下字段,在该字段中,我需要根据收到的输入在运行时注入地图。

我尝试使用@Resource注释,但它与xml文件中指定的beanId紧密耦合。

@Resource(name="someMap")
private final Map<String,String> someMap;
<bean id="someMap" class="java.util.HashMap">
        <constructor-arg>
        <map>
            <entry key="Engraving1" value="@Engraving1" />
            <entry key="Engraving2" value="@Engraving2" />
            <entry key="Engraving3" value="@Engraving3" />
            <entry key="LeaveBlank" value="@LeaveBlank" />
        </map>
    </constructor-arg>
</bean>

    <bean id="someOtherMap" class="java.util.HashMap">
        <constructor-arg>
        <map>
            <entry key="Descirption" value="@Desc" />
            <entry key="Engraving2" value="@Engraving2" />
            <entry key="Engraving3" value="@Engraving3" />
            <entry key="UniqueId" value="$60034" />
        </map>
    </constructor-arg>
</bean>

我想要的是摆脱这种紧密的耦合,并将someMap字段初始化为spring xml中定义的Map的另一种风味,让我们说someOtherMap

如果不使用Reflection ,则不能动态更改注释,因此不能更改reousece的名称。

 @Resource(name="NAME")

但是定义两个具有不同属性或constrctor-arg的 bean非常容易。

    <bean id="boss" class="***">
       <property name="mydata">
           <bean class="HashMap">
           </bean>
       </property>
    </bean>

如果您只想要一个具有不同数据的bean定义,则XML和Annotation不起作用。 工厂方法或setMethod将适用于此方法,您需要一些Java代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM