【发布时间】:2015-08-28 16:21:54
【问题描述】:
我正在尝试将使用 CURAM 编写的应用程序移植到 Struts2 项目中。我们正在使用 Spring 来利用其数据库事务功能。按照在 CURAM 应用程序中编写应用程序代码的方式,我不能使用 Spring 的依赖注入功能。我需要能够从我的业务逻辑中的任何位置访问 Spring ApplicationContext。并且在我需要时创建一个新的 ApplicationContext 实例,这会使事情变得急促。
我在 Internet 上找到了这个资源,它向您展示了如何创建 Spring 的 ApplicationContext 的静态单例实例。
Access the Spring-ApplicationContext from everywhere in your Application
这可以解决我的问题,但我有顾虑。静态单例实例不是意味着每个调用 Struts2 操作的用户都会从同一个 ApplicationContext 实例中获取业务对象吗?
默认情况下,Spring bean 是 ApplicationContext 实例中的单例。因此,我认为 ApplicationContext 的静态单例实例会导致所有用户/事务使用所有业务对象的相同实例,这会破坏事务并可能导致整个地方的锁定。我的假设是否正确?
如果我将所有 Spring Bean 声明为原型会怎样?这是否允许我在使用 ApplicationContext 的静态单例实例时利用 Springs 数据库事务/并发处理功能?
谢谢。
【问题讨论】:
-
事务通过线程本地管理。 Spring 已经想通了。但是,我建议您运行一些多线程一致性检查,例如使用jmeter,以确保一切正常,考虑到您正在研究的一些低级内容。
标签: java spring applicationcontext