使用注释将Map注入构造函数

时间:2013-06-29 05:45:54

标签: spring dependency-injection annotations

有人可以告诉我如何使用Map对象连接以下构造函数而不使用XML,只使用注释?有可能吗?

public class MyClass {
...
    public MyClass (final Map<String, SomeBean> map) {
        this.map = map;
    }
...
}

当前的XML我想摆脱:

<bean id="mybean" class="my.package.MyClass">
    <constructor-arg>
        <util:map>
            <entry key="KEY1" value-ref="ref-bean1" />
            <entry key="KEY2" value-ref="ref-bean2" />
        </util:map>
    </constructor-arg>
</bean>

<bean id="ref-bean1" class="my.package.SomeBean">... </bean>

<bean id="ref-bean2" class="my.package.SomeBean">... </bean>

1 个答案:

答案 0 :(得分:1)

假设您的Spring配置已配置为注释配置,您应该能够通过将myBean的构造函数标记为MyClass来消除@Autowired声明。

public class MyClass {
...
    @Autowired
    public MyClass (final Map<String, SomeBean> map) {
        this.map = map;
    }
...
}

Spring将尝试使用由bean名称键入的MyClass Map个实例连接SomeBean构造函数。

由于配置了SomeBean的单独实例(可能是他们自己的状态),因此您需要将这些实例保留在XML中。

<bean id="KEY1" class="my.package.SomeBean">... </bean>

<bean id="KEY2" class="my.package.SomeBean">... </bean>

或者,正如LaurentG所说,总是@Configuration