NumberFormat потокобезопасность с пружиной - PullRequest
0 голосов
/ 14 октября 2011

NumberFormat JavaDoc говорит:

Числовые форматы обычно не синхронизируются. Рекомендуется создавать отдельные экземпляры формата для каждого потока.

Я хочу получить экземпляр для использования в моих объектах. Один экземпляр для каждого потока или один экземпляр для каждого объекта (объекты не являются общими для всех потоков). На данный момент объект имеет переменную экземпляра, содержащую NumberFormat.

private NumberFormat nFormat = NumberFormat.getInstance(Locale.ITALY);

Это уже хорошо, у меня не должно быть никаких условий гонки, поскольку объекты не являются общими.

Однако я не знаю, как использовать Spring для настройки этого, я знаю о factory-method, но я не знаю, как передать ему Locale.

<bean factory-method="getInstance" class="java.text.NumberFormat" 
    scope="prototype" />

Как правильно объявить мой компонент NumberFormat?

Ответы [ 2 ]

3 голосов
/ 14 октября 2011

Вот как вы могли бы это сделать:

<bean id="numberFormat" factory-method="getInstance"
      class="java.text.NumberFormat" scope="prototype">
    <constructor-arg>
        <util:constant static-field="java.util.Locale.ITALY" />
    </constructor-arg>
</bean>

Однако я, вероятно, вообще не использовал бы Spring для этого, вместо этого я бы использовал статический метод фабрики.

1 голос
/ 14 октября 2011

Я думаю, вы можете использовать:

<bean factory-method="getInstance" class="java.text.NumberFormat" 
scope="prototype">
   <constructor-arg><ref bean="locale_bean"/></constructor-arg>
</bean>

Элемент constructor-arg используется для передачи bean-компонентов и значений, необходимых для построения объекта.См. Также Примеры внедрения зависимостей для получения дополнительной информации:)

...