Да, потокобезопасен до тех пор, как он объявлен как области видимости прототипа боба, и вам необходимо создать init()
метод, который вызывается Spring:
@PostConstruct
public void init() {
listOfItem = context.getListOfItem();
}
RequestContext доступен только из одного потока (выделенного для обработки запроса), конструктор не является повторным по характеру создания объекта непосредственно перед его вызовом.
Будьте осторожны, чтобы не путать с listOfItem
каким-то образом быть защищены от проблем Реентерабельность, хотя, только потому, что она заблокирована в MyMapper
объект не останавливает его от разделяют геттер, если один были доступны (там ISN» т в вашем случае). Я также вижу, что это абстрактный класс, но поскольку listOfItem
является частным, подклассы не будут иметь к нему доступа. Любую пропущенную ссылку этого Списка можно было бы манипулировать параллельными потоками, если бы были какие-либо копии, сделанные из ссылки (поскольку List
s изменяются на Java).
Поскольку эта безопасность является вашей целью, создайте единичный тест, который проверяет видимость поля и терпит неудачу, если доступ к полю через отражение не вызывает соответствующее исключение. Вы также можете прокомментировать поле со своей внутренней аннотацией маркера, чтобы указать, что поле является потокобезопасным. Это помогает с документацией и в виде аннотации потенциальной будущей автоматизации (например, тестовой базой, которая может искать все такие аннотации и автоматически запускать тест отражения).
Он выглядит очень чистым! Продолжайте хорошую работу.
hm, но isnt контекст null, когда он является autowiring? – hudi
Да, это правильно, я уточню свой ответ. (Я занимаюсь Scala в течение последних нескольких лет ...) –
если метод init вызван весной, разве это не проблема с той же проблемой? Или вы предлагаете, чтобы класс не был в одиночном режиме? – eis