Spring字符串和Map注入

z9smfwbn  于 2022-11-21  发布在  Spring
关注(0)|答案(1)|浏览(145)

我有个简单的问题。(对我来说有点奇怪)
我有一颗豆子在下面。

@Configuration
public class ConfigurationBean {

@Bean
public Config getConfig() {
    return ConfigFactory.load();
}

@Bean
public Map<String, String> tableMap(Config config) {
    return config.getObject("tables").unwrapped().entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toString()));
}

@Bean
public String url(Config config) {
    return config.getString("url");
}
}

和我的服务类;

@Component
public class TableService  {
private final Map<String, String> tableMap;
private final String url;
private Connection connection;
private final TableToJsonConverter tableToJsonConverter;

@Autowired
public TableService(TableToJsonConverter tableToJsonConverter,
                    String url,
                    Map<String, String> tableMap) {
    this.url = url;
    this.tableMap = tableMap;
    this.tableToJsonConverter = tableToJsonConverter;
}

因此,方案是url bean返回值www.google.comtableMap bean返回newGame:new_game_table,oldGame:old_game_table
现在,我希望在TableService的构造函数中将map注入到map,将string注入到string。

我有点迷惑不解,能不能请你告诉我这里发生了什么事?
先谢谢你。

yshpjwxd

yshpjwxd1#

这是预期的行为。Spring支持接受集合类型以传入多个bean。因此List<MyPojo>将注入所有MyPojo bean的列表。在您的示例中,Spring正在注入bean名称/字符串值,因为这是Map<String, String>
你不需要为bean命名,默认的bean名是方法名。在这种情况下,限定符是一个有效的解决方法。

相关问题