Ответ 1
Вы можете использовать @Value
:
@Value("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
В моем приложении applicationContext.xml
<context:property-placeholder location="classpath*:*.properties" />
<bean id="clientPreferencesManager" class="pl.bildpresse.bildchat2.business.ClientPreferencesManager" >
<property name="clientApiUrl" value="${clientapi.url}" />
</bean>
Можно ли сделать то же самое с помощью autwire? Что-то вроде:
@Autowired
@Qualifier("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
Вы можете использовать @Value
:
@Value("${clientapi.url}")
public void setClientApiUrl(String clientApiUrl) {
this.clientApiUrl = clientApiUrl;
}
Мне потребовалось некоторое время, чтобы понять, почему это не сработало. Я всегда использовал #
вместо $
. Я всегда получал сообщение:
EL1008E:(pos 0): Field or property 'secretkey' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'
Просто пришлось изменить его:
@Value("#{secretkey}')
к
@Value('${secretkey}')
Надеюсь, это сэкономит время.
Ok. Просто понял. Вам нужно добавить @Autowired Что-то вроде:
@Autowired
@Value("${clientapi.url}")
private StringValueResolver resolver;
Я использую spring 3.0.0.RELEASE
Приветствия
Для spring 3.0 правильный путь - тот, который показан - с помощью @Value("${expression}")
Для spring pre-3.0 вы можете попробовать:
@Autowired
private StringValueResolver resolver;
Здесь не было проблем с инициализацией контекста, но я не уверен, что это сработает. С помощью распознавателя вы можете разрешить свойства.
Мое решение - использовать
<context:property-override location="classpath:clientapi.properties" />
а затем в файле clientapi.properties
clientPreferencesManager.clientApiUrl=http://localhost:8084/ClientAPI/resources/
Это тоже хорошо.