Spring свойства (property-placeholder) автоуслуги

В моем приложении 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;
}

Ответ 1

Вы можете использовать @Value:

@Value("${clientapi.url}") 
public void setClientApiUrl(String clientApiUrl) { 
    this.clientApiUrl = clientApiUrl; 
}

Ответ 2

Мне потребовалось некоторое время, чтобы понять, почему это не сработало. Я всегда использовал # вместо $. Я всегда получал сообщение:

EL1008E:(pos 0): Field or property 'secretkey' cannot be found on object of type 'org.springframework.beans.factory.config.BeanExpressionContext'

Просто пришлось изменить его:

@Value("#{secretkey}')

к

@Value('${secretkey}')

Надеюсь, это сэкономит время.

Ответ 3

Ok. Просто понял. Вам нужно добавить @Autowired Что-то вроде:

@Autowired
@Value("${clientapi.url}") 
private StringValueResolver resolver;

Я использую spring 3.0.0.RELEASE

Приветствия

Ответ 4

Для spring 3.0 правильный путь - тот, который показан - с помощью @Value("${expression}")

Для spring pre-3.0 вы можете попробовать:

@Autowired
private StringValueResolver resolver;

Здесь не было проблем с инициализацией контекста, но я не уверен, что это сработает. С помощью распознавателя вы можете разрешить свойства.

Ответ 5

Мое решение - использовать

<context:property-override location="classpath:clientapi.properties" />

а затем в файле clientapi.properties

clientPreferencesManager.clientApiUrl=http://localhost:8084/ClientAPI/resources/

Это тоже хорошо.