@Value注入使用Spring地图的地图?

时间:2018-10-24 18:40:33

标签: java spring spring-boot dependency-injection properties

我们有一个Java应用程序,该应用程序使用Spring(5.0.8)进行依赖项注入,但不受Spring Boot的管理。简单的@Value注入是通过在我们的Java配置类中实现的

final PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
    StandardEnvironment myEnv = new StandardEnvironment();
    try {
        MutablePropertySources propertySources = new MutablePropertySources();
        propertySources.addFirst( new SystemEnvironmentPropertySource(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME,
                                myEnv.getSystemProperties()));
        propertySourcesPlaceholderConfigurer.setPropertySources(propertySources);
}catch.....

ApplicationContext是由

启动的
AnnotationConfigApplicationContext APPLICATION_CONTEXT =
            new AnnotationConfigApplicationContext(MyConfig.class)

然后我可以开始将属性用作

@Component
public class MyService {
    @Value( "${"myvalInSystemProperty"}")
    private String myval;

    ........
}

现在我想像使用SpEL一样添加@Value注入

@Component
public class MyService {

    @Value("#{${usermap}}")
    private Map<String, Map<String, String>> usermap;

    ........
}

相应的属性文件是

usermap = {
    key1:{  
      subkey1:'subvalue1',
      subkey2:'subvalue2'
   },
    key2:{  
      subkey3:'subvalue3',
      subkey4:'subvalue4'
   }
}

我已经将属性文件添加到了propertySources之类的

propertySources.addLast( new ResourcePropertySource( "classpath:myMap.properties"));

我遇到了

之类的错误
Expression [#{{}] @0: No ending suffix '}' for expression starting at character 0: #{{}

无法识别我的@Value注射

任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题。愚蠢。在行尾需要反斜杠