@ Значение внедрения карты карт с помощью Spring? - PullRequest
0 голосов
/ 24 октября 2018

У нас есть 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;

    ........
}

теперь я хочу добавить @Value инъекцию, используя SpEL, как

@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 голосов
/ 24 октября 2018

Я нашел проблему.Глупо.Нужен обратный слеш в конце строки

...