【问题标题】:Dynamically Injecting a Map动态注入地图
【发布时间】:2019-11-17 18:57:06
【问题描述】:

我有一个名为 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

【问题讨论】:

    标签: java spring dependency-injection properties dependency-properties


    【解决方案1】:

    没有using Reflection你不能改变注解动态,所以你不能改变reusece的名字。

     @Resource(name="NAME")
    

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

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

    如果您只想要一个具有不同数据的 bean 定义,XML 和 Annotation 不应该工作。 factory-method 或 setMethod 都可以,你需要一些 java 代码。

    【讨论】:

    • 能否请您详细说明使用constructor-arg更改值的部分?
    猜你喜欢
    • 1970-01-01
    • 2019-05-09
    • 2014-08-08
    • 2016-06-09
    • 2019-03-29
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多