如何使用@Spring注解来注入一个Map?

54 浏览
0 Comments

如何使用@Spring注解来注入一个Map?

如何使用Spring中的@Value注解将属性文件中的值注入到Map中?

我的Spring Java类是Test,我尝试使用$,但是得到了以下错误消息:

无法自动装配字段:Test.standard的私有java.util.Map; 嵌套异常是java.lang.IllegalArgumentException:在字符串值"${com.test.standard}"中无法解析占位符'com.test.standard'

@ConfigurationProperty("com.hello.foo")
public class Test {
   @Value("${com.test.standard}")
   private Map standard = new LinkedHashMap
   private String enabled;
}

我在.properties文件中有以下属性:

com.test.standard.name1=Pattern1
com.test.standard.name2=Pattern2
com.test.standard.name3=Pattern3
com.hello.foo.enabled=true

0
0 Comments

如何使用@Value Spring注解注入Map?

问题的出现原因:有些开发者想要从属性文件中注入值到Map中,但不知道如何使用@Value注解来实现。

解决方法:可以使用以下方式使用@Value注解从属性文件中注入值到Map中。

在属性文件中设置属性:

propertyname={key1:'value1',key2:'value2',....}

在代码中使用:

("#{${propertyname}}")  private Map<String,String> propertyname;

需要注意的是,注解中的井号(#)是必需的。

如果值没有使用引号括起来,将会出现SpelEvaluationException异常。

如果要使用带有空格的字符串(例如"USB Camera 0xfd120000046d0819")作为键,需要使用单引号。

如果键中有冒号(:),也需要使用单引号。

该方法还可以进行类型转换,例如:("#{${double.map}}") final Map<String, Double> doubleMap

如果要设置默认值以防止出现异常,可以使用以下方式:("#{${tomcat.oleaconfig:{:}}}")

如果要在yml文件中指定相同的内容,可以使用以下方式:propertyname : > { key1:'value', key2:'value' }

需要注意的是,这种方式与使用propertyname.key1=...propertyname.key2=...不同。

在YAML中,需要将其视为字符串,并用引号括起来,例如:"{key1:'value1',key2:'value2',....}"

如果值中有包含SpEL表达式的单引号,会出现问题。

对于Map<String, List<String>>是否可行,目前没有明确的答案。

是否可以注入LinkedHashMap也没有明确的答案。

0
0 Comments

如何使用@Value Spring注解来注入Map?

在这个问题中,出现的原因是声明bean mongoConfig的方法定义不正确。方法应该像这样定义:

public Map mongoConfig() {
    return new HashMap();
}

解决方法是将方法的返回类型从`Map>`改为`Map`。

以下是完整的代码示例:

// 读取配置
@Value("${spring.data.mongodb}")
private Map mongoConfig;
// 使用配置
public HashMap mongoTemplateMap() throws UnknownHostException {
    HashMap mongoTemplates = new HashMap<>();
    for (Map.Entry entry : mongoConfig.entrySet()) {
        String k = entry.getKey();
        String v = entry.getValue();
        MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI(v)));
        mongoTemplates.put(k, template);
    }
    return mongoTemplates;
}

通过使用`@Value`注解,并指定`"${spring.data.mongodb}"`作为属性值,我们可以将配置文件中的`spring.data.mongodb`键的值注入到`mongoConfig`变量中。

这是一种从application.yml中注入Map的最简洁的方式。

0
0 Comments

在这篇文章中,我们将讨论如何使用@Spring注解来注入一个Map,并解决相关问题。

在Spring Boot中,我们可以使用注解来加载属性映射。根据文档的说明,我们可以将属性加载到Bean中,例如:

(prefix="my")
public class Config {
    private List servers = new ArrayList();
    public List getServers() {
        return this.servers;
    }
}

但是,上述示例中的配置只适用于特定的前缀。如果我们想要为Test类中的成员变量使用不同的前缀,应该如何处理呢?

解决方法是创建两个单独的Bean,并使用注解将它们自动注入到Test类中。这样,我们就可以为每个Bean指定不同的前缀。

需要注意的是,这个解决方法只适用于Spring Boot,而不适用于普通的Spring框架。

希望这篇文章能对你解决问题有所帮助!

0