我是Spring的新手,有一些基本的问题。在下面给出的Spring例子之一中,我注意到EmployeeManager是Autowired。Spring Singleton bean线程安全
问:
- 的EmployeeManager范围不给,所以我会假设默认范围是辛格尔顿和Spring bean是不是线程安全的。这个假设是正确的吗?
EmployeeManager被定义为可以被多个线程访问的Servlet的一部分。 假设多个线程同时使用值“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; } }
EmployeeManager -
public interface EmployeeManager {
public void addEmployee(EmployeeEntity employee);
public List<EmployeeEntity> 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<EmployeeEntity> getAllEmployees() {
return employeeDAO.getAllEmployees();
}
@Override
@Transactional
public void deleteEmployee(Integer employeeId) {
employeeDAO.deleteEmployee(employeeId);
}
public void setEmployeeDAO(EmployeeDAO employeeDAO) {
this.employeeDAO = employeeDAO;
}
}
也许阅读答案http://stackoverflow.com/questions/11508405/are-spring-mvc-controllers-singletons将有所帮助。 – Atul 2014-11-24 08:30:10