0

我有一个以标准方式加载 Spring 上下文的 Web 应用程序:

web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:META-INF/applicationContext.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>
             org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

不幸的是,我的应用程序不是“纯”Web 应用程序,这意味着我没有真正的前端,而只有 Akka 远程参与者,它们也通过 web.xml 侦听器进行初始化。我的 Akka 演员(标准 POJO)需要获取 Spring 上下文,所以我的问题是:我如何从没有引用 Servlet 上下文的类中获取 Spring 上下文?

基本上我不能使用:

WebApplicationContextUtils.getWebApplicationContext(ctx);

...因为 Akka 演员没有参考 ServletContext。

谢谢。

4

3 回答 3

1
  • 如果这些 POJO 是 spring bean,你可以让它们实现ApplicationContextAware

  • 你可以用@Configurable任何 pojo 做一个春豆

  • 如果它们不是 spring bean,您可以ServletContext在启动时将其存储在 JNDI 中,并通过 JNDI 访问它。

于 2010-12-17T13:32:52.693 回答
1

您可以创建自己的初始化程序,它将创建一个具有众所周知的 id 的 SpringContextActor 实例,然后需要对 SpringContext 执行某些操作的参与者可以查看 ActorRegistry 中的 SpringContextActor 并向其发送消息。

于 2010-12-18T17:17:18.880 回答
0

我想知道一个如此强烈地依赖于网络层的设计。

推荐的 Spring 习惯用法是有一个从 Web 层调用的 POJO 接口服务层。这样做的好处是,即使 Web 层被完全移除,也可以使用服务层。

如果您没有服务层,也许添加一个可以让您灵活地使用它,而无需 Web 层或应用服务器。

于 2010-12-17T13:40:57.340 回答