java – Spring:这个模式是否是线程安全的?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring:这个模式是否是线程安全的?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2283字,纯文字阅读大概需要4分钟。
内容图文
![java – Spring:这个模式是否是线程安全的?](/upload/InfoBanner/zyjiaocheng/828/746531b6094d450680968a07c26c8350.jpg)
我一直在学习如何使用Spring框架进行hibernate事务管理,到目前为止,它已经为此目的提供了很大的帮助.问题是,最近,我意识到我没有考虑过我选择的模式如何处理并发,特别是在Web应用程序的情况下.
下面的代码举例说明了我正在使用的模式,它是我发现的一些示例和自定义servlet实现的组合.我有点怀疑这个模式是如何工作的,以及它是否是线程安全的,因为我对它进行了一些定制.我的一些担忧是:
>即使servlet在技术上不是单例,我的印象是大多数时候每个servlet类只有一个实例.
>如果我理解正确,每个自动连接的属性将是一个单独的,所以如果上面是真的,那么就会有一个servlet实例和一个服务实例,而这个实例又有一个DAO实例,它有一个拥有SessionFactory实例.
>如果以上是正确的,那么我可以想象servlet上的每个请求都将使用相同的对象,我想知道这是否是一件好事.在给出一些想法之后,我无法判断线程安全是否更好于拥有单例或为每个http请求创建新实例.
>通常这些弹簧模式有一个@Controller类,我跳过它而不是我们的自定义servlet,我想知道这是否会以某种方式破坏模式的并发性.
谢谢
public interface UserDAO
{
public void save(User user);
}
@Repository
public class HibernateUserDAO implements UserDAO
{
@Autowired(required=true)
protected SessionFactory sessionFactory;
public void save(User user)
{
this.sessionFactory.getCurrentSession().save(user);
}
}
public interface UserService
{
public void saveUser(User user);
}
@Service
public class DefaultUserService implements UserService
{
@Autowired(required=true)
private UserDAO userDAO;
@Transactional
public void saveUser(User user)
{
this.userDAO.save(user);
}
}
public class UserServlet extends CustomServlet
{
@Autowired(required=true)
private UserService userService;
public void init() throws ServletException
{
super.init();
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//would call the appropriate method depending on parameters, etc.
//simplified here for demonstration purposes
this.userService.saveUser(user);
}
}
最佳答案:
如果您在Hibernate配置中设置了合适的策略,则sessionFactory.getCurrentSession()将返回作用域会话,而不是全局会话.会话工厂旨在成为单身人士,这是非常正确的; getCurrentSession()是桥接到当前上下文范围的常用方法.
“合适的策略”各不相同,但是如果你使用围绕DAO的spring事务管理,那么一个会话将有一个DAO方法调用的生命周期,并且Spring将在退出时编排适当的调用commit / rollback.
内容总结
以上是互联网集市为您收集整理的java – Spring:这个模式是否是线程安全的?全部内容,希望文章能够帮你解决java – Spring:这个模式是否是线程安全的?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。