У меня есть существующая конфигурация пружины XML на основе, используя PropertyPlaceholderConfigurer следующим образом:Spring @PropertySource и окружающая среда Преобразование типов
<context:property-placeholder location="classpath:my.properties" />
<bean id="myBean" class="com.whatever.TestBean">
<property name="someValue" value="${myProps.value}" />
</bean>
Где myprops.value=classpath:configFile.xml
и присваиватель свойства «SomeValue» принимает org.springframework.core .io.Resource.
Это хорошо работает - PPC автоматически преобразует значение строки и ресурса.
Я сейчас пытаюсь использовать Java Config и @PropertySource аннотацию следующим образом:
@Configuration
@PropertySource("classpath:my.properties")
public class TestConfig {
@Autowired Environment environment;
@Bean
public TestBean testBean() throws Exception {
TestBean testBean = new TestBean();
testBean.setSomeValue(environment.getProperty("myProps.value", Resource.class));
return testBean;
}
}
Метод GetProperty() класса Spring по окружающей среде обеспечивает перегрузку для поддержки преобразования в различных типов, которые я «ве используется, однако это не по умолчанию поддержки преобразования свойство ресурса:
Caused by: java.lang.IllegalArgumentException: Cannot convert value [classpath:configFile.xml] from source type [String] to target type [Resource]
at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:81)
at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:370)
at config.TestConfig.testBean(TestConfig.java:19)
Глядя на основной исходный код, реализация окружающей среды использует PropertySourcesPropertyResolver, который, в свою очередь, использует DefaultConversionService и это только регистрирует очень простые преобразователи.
У меня есть два вопроса:
1) Как я могу получить это, чтобы поддержать преобразование в Ресурс?
2) Зачем мне это нужно, когда оригинальный PPC делает это для меня?
Благодарности n1ckolas, я видел, что это сделано таким образом, прежде - как вы говорите, что это эквивалентно XML. Однако я думал, что это именно то, что должно было избегать аннотации @PropertySource? –