我有几个 CustomerApiLink 类型的 Spring bean,假设这些 bean 的名称分别为“ableCustomer”、“bravoCustomer”和“charlieCustomer”(这只是一个示例)。现在我通过
将它们全部注入(inject)到 map 中//DI through annotation
@Inject
private Map<String,CustomerApiLink> apis;
但我发现默认情况下 Spring IoC 容器总是使用它们的名称作为映射键,我想覆盖它,以获得一个映射:
able-> bean ref="ableCustomer";
bravo-> bean ref="bravoCustomer";
查理-> bean ref="charlieCustomer";
是否可以用注解来做到这一点?或者我必须在 xml 文件中创建另一个 util bean?
最佳答案
我已经做过很多次了。我通常使用 @Inject
将我想要的对象的 Set
传递给构造函数或 setter,然后在该点创建一个 Map
。
public class MyObject {
private Map<String, CustomerApiLink> apiLinks;
@Inject
public MyObject(Set<CustomerApiLink> apis) {
apiLinks = new HashMap<String, CustomerApiLink>();
for(CustomerApiLink api : apis) {
apiLinks.put(api.getName(), api);
}
}
}
当然,对于这个解决方案,它需要一种从 CustomerApiLink
对象中获取 key 的方法。在这种情况下,我假设会出现一个名为 getName()
的方法。
关于java - 覆盖 @autowired/@Inject Map<String,Object> 的键字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311073/