1

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

我想将一个上下文中的 bean 的 bean 依赖项注入到另一个上下文中(双向访问)。Web 应用程序 bean 将是“会话”范围的 bean。

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

在 webapplication 上下文初始化时,我可以将“core”bean 注入“webapplication”bean(一个访问单例的 BeanFactory 执行魔术),但不知道如何做相反的事情;因为保存 WebApplicationContext 的 Spring ThreadLocal 尚未初始化。

问题是。这是我试图做的可能吗?如果答案是“是”,你会怎么做?

提前致谢。

编辑:

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

4

1 回答 1

1

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

从web(表示、访问)到核心的依赖是可以理解和需要的——毕竟你是在业务例程上构建一个接口。这就是默认的工作方式,为核心上下文创建单独的子 (web) 应用程序上下文。

我几乎无法想象反向依赖的用例。为什么你的业务逻辑依赖于 web 层?如果您尝试将应用程序迁移到另一种表示技术(桌面、移动)怎么办?你能证明这种反向依赖的原因吗?会话 bean是什么意思?

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

于 2012-07-25T17:27:45.107 回答