java - 覆盖 @autowired/@Inject Map<String,Object> 的键字符串?

标签 java spring map dependency-injection inversion-of-control

我有几个 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/

相关文章:

java - 需要有关具有到期时间限制的 hashMap 的帮助

java - 将 javafx 中的表格上传到 Excel 工作表

java - 无法在测试行为调用的 Java 函数中使用 Citrus 变量

java - 如果 View 上有多个控件,如何提供选择?

java - 使用 JAVA API 查找知道电子邮件地址的 SMTP 主机和端口

ios - MapBox 水域/陆地检测

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象

Spring 批处理不处理所有记录

Java SpringSecurity 使用 HTML GET 参数自动登录

map - 悬停在特定国家/地区时,在空白世界地图上突出显示国旗