Видимость свойства метода в бине (потокобезопасен или нет ?!) - PullRequest
1 голос
/ 07 октября 2011

Я просто думаю об этом. Если у меня есть бин dao весной, и у этого бина есть защищенное / публичное свойство "currentSQL". Будет ли значение в этом свойстве «видимым» для всех параллельных запросов или нет?

Пример:

@Component
public class FooDAO {

  @Autowired
  private DataSource dataSource;

  private String currentSQL;

  public void doSome()
  {
    currentSQL = "Foo SQL query";
   }

  public String getSome()
  {
    return currentSQL;
  }
}

Является ли свойство currentSQL в приведенном выше примере безопасным для запроса или нет?

Ответы [ 3 ]

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

это зависит от того, как вы устанавливаете область действия компонента FooDAO.

<bean id="fooDAO" class="-" scope="prototype"/>

для каждого доступа (запроса) в fooDAO spring создается новый экземпляр FooDAO. Тогда это можно считать поточно-ориентированным, если ваши локальные потоки не используют один и тот же экземпляр FooDAO. Если это так, вы должны обрабатывать доступ к потокам с помощью "public synchronized void doSome ()"

<bean id="fooDAO" class="-" scope="singleton"/>

если ваш бин синглтон, то это не потокобезопасно. Экземпляр синглтона является общим для вашего приложения. Если это так, то вы должны синхронизировать метод.

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

Если ваша конфигурация bean-компонента устанавливает DAO в качестве одноэлементного bean-объекта (http://static.springsource.org/spring/docs/2.0.x/reference/beans.html#beans-factory-scopes),), этот объект будет использоваться во всем приложении, где он внедряется, и этот экземпляр var не будет безопасным. Обратите внимание, что синглтонная областьявляется областью по умолчанию.

0 голосов
/ 07 октября 2011

Нет, не будет. ваш бин является областью действия Singleton, что означает, что у вас есть только один экземпляр класса, но это не означает, что он безопасен для потоков. Объем Singleton не имеет ничего общего с шаблоном проектирования Singleton. Вам необходимо позаботиться о безопасности потоков и синхронизировать доступ к этому свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...