1

有人可以告诉我如何在不使用 XML 并且仅使用注释的情况下将以下构造函数与 Map 对象连接起来吗?可能吗?

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>
4

1 回答 1

1

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

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

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

由于已SomeBean配置的单独实例(可能具有它们自己的状态),因此您需要将它们保留在 XML 中。

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

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

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

于 2013-07-01T13:58:17.633 回答