Web应用程序上下文和服务上下文之间的双向依赖

时间:2012-07-25 16:50:45

标签: java spring java-ee

我有两个弹簧上下文:“webapplication”上下文和“核心”上下文。上下文“核心”在服务器启动时初始化,并附加到保存上下文的Singleton类。启动Web应用程序时会初始化“webapplication”上下文。

我想在一个上下文中将bean从bean注入到另一个上下文(双向访问)。 webapplication bean将成为“会话”范围的bean。

我正在测试这个概念证明:webapp bean - > (取决于)核心豆 - > (这取决于另一个)webapp bean。

在webapplication上下文初始化中,我可以将“核心”bean注入“webapplication”bean(一个接受单例的BeanFactory做魔术),但是无法弄清楚如何进行反转;因为保存WebApplicationContext的Spring ThreadLocal尚未初始化。

问题是。这是我想做的事吗?如果答案是“是”,你会怎么做?

提前感谢。

编辑:

我意识到我做错了什么。事实是,我正试图在错误的时间向服务层注入对会话bean的依赖;也就是说,在我没有当前用户会话的Web初始化时间。

1 个答案:

答案 0 :(得分:1)

这看起来像是一个架构问题,而不是技术问题(当然也不是Spring问题)。您在核心上下文和 web 上下文之间的分离非常好。前者处理业务流程,而后者负责表示,可能是一些API。

web (表示,访问)与核心之间的依赖关系是可以理解和必需的 - 毕竟您正在构建业务例程的接口。这就是默认工作的方式,创建核心上下文的单独子(Web)应用程序上下文。

我很难想象倒置依赖的用例。为什么您的业务逻辑依赖于Web层?如果您尝试将应用程序迁移到不同的表示技术(桌面,移动设备),该怎么办?你能证明这种倒置依赖的原因吗?你是什​​么意思 session bean

双向依赖关系,以及持有类加载器对应用程序上下文的广泛引用的静态单例,应该表明设计出了问题。