У нас есть 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
инъекцию
Может кто-нибудь пролить свет на это?