当autowired属性有义务时,如何使用spring创建线程安全的servlet?

时间:2016-04-28 15:06:11

标签: java servlets thread-safety autowired spring-jdbc

我正在开发一个使用spring的Web项目,我必须保证线程安全。我的控制器类具有“@Autowired”属性,根据我的研究,“@Autowired”实现是单例。

我必须在我的控制器类中使用“@Autowired”注释,因为我的DBStuff类调用我的DB过程方法。 (这是一个Spring-Jdbc项目,我实现了连接和数据库操作)

我的控制器类是这样的:

@Controller
public class ApplicationController{

    @Autowired
    private DBStuff dbStuff;

    @RequestMapping(value = "/application/new", method = { RequestMethod.POST })
    public ModelAndView applicationNew(Locale locale, Model model, HttpServletRequest request) {
    //   ApplicationControllerTS is the class that implements servlet requirements. 
    //   Takes the request and fills the model etc. 
        return new ApplicationControllerTS(dbStuff).newAppl(locale, model, request);
    }



// and RequestMapping methods keep on going
}

自动装配的DBStuff类是否使这个servlet不能用于线程安全?

提前致谢。

1 个答案:

答案 0 :(得分:0)

这取决于ContextLoaderListener本身是否是线程安全的:如果不是,则servlet也不是。

自动装配过程本身发生在webapp部署期间(由Spring DBStuff启动),并且在对任何对该webapp servlet的请求可以处理之前,Servlet规范保证完成。我相信每个理智的Servlet容器都会在webapp的启动工作期间对通过客户端请求传递给servlet的线程强制执行在webapp的监听器中完成的更改的线程间可见性。

因此,再次回答您的问题取决于class OdooHrDepartement < ActiveRecord::Base belongs_to :company belongs_to :odoo_hr_departement belongs_to :odoo_users end 的线程安全性。