Безопасность резьбы Spring Singleton BeansJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Безопасность резьбы Spring Singleton Beans

Сообщение Anonymous »

Я новичок в Spring, и у меня есть один простой вопрос. В одном из примеров Spring, приведенных ниже, я заметил, что менеджер сотрудников подключается автоматически.

Вопрос: p>
  • Область использования EmployeeManager не указана, поэтому я предполагаю, что областью по умолчанию является SINGLETON, а bean-компоненты Spring не являются потокобезопасными. Верно ли это предположение?
  • Сотрудник Manager — это часть сервлета, к которой могут обращаться несколько потоков.
    Предположим, метод «delete» вызывается несколькими потоки одновременно со значениями «1», «2» и «3», и для каждого потока (начиная с его SINGLETON) генерируется один и тот же экземпляр EmployeeManager, значение удаления которого будет выполнено. Как Spring обрабатывает это условие?

    @Controller
    public class EditEmployeeController
    {
    @Autowired
    private EmployeeManager employeeManager;

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String listEmployees(ModelMap map)
    {
    map.addAttribute("employee", new EmployeeEntity());
    map.addAttribute("employeeList", employeeManager.getAllEmployees());
    return "editEmployeeList";
    }
    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addEmployee(@ModelAttribute(value="employee") EmployeeEntity employee, BindingResult result)
    {
    employeeManager.addEmployee(employee);
    return "redirect:/";
    }
    @RequestMapping("/delete/{employeeId}")
    public String deleteEmplyee(@PathVariable("employeeId") Integer employeeId)
    {
    employeeManager.deleteEmployee(employeeId);
    return "redirect:/";
    }
    public void setEmployeeManager(EmployeeManager employeeManager) {
    this.employeeManager = employeeManager;
    }
    }
Менеджер по работе с сотрудниками –

public interface EmployeeManager {
public void addEmployee(EmployeeEntity employee);
public List getAllEmployees();
public void deleteEmployee(Integer employeeId);
}

@Service
public class EmployeeManagerImpl implements EmployeeManager
{
@Autowired
private EmployeeDAO employeeDAO;
@Override
@Transactional
public void addEmployee(EmployeeEntity employee) {
employeeDAO.addEmployee(employee);
}
@Override
@Transactional
public List getAllEmployees() {
return employeeDAO.getAllEmployees();
}
@Override
@Transactional
public void deleteEmployee(Integer employeeId) {
employeeDAO.deleteEmployee(employeeId);
}
public void setEmployeeDAO(EmployeeDAO employeeDAO) {
this.employeeDAO = employeeDAO;
}
}


Подробнее здесь: https://stackoverflow.com/questions/270 ... ead-safety
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»