抓住一个Listener加载Spring上下文

时间:2010-12-17 13:16:36

标签: java spring akka

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

的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应用程序,这意味着我没有真正的前端,而只是通过web.xml监听器初始化的Akka远程actor。 我的Akka actor(标准POJO)需要掌握Spring上下文,所以我的问题是:如何从没有引用Servlet上下文的类中获取Spring上下文?

基本上我不能用:

WebApplicationContextUtils.getWebApplicationContext(ctx);

...因为Akka actor没有引用ServletContext。

感谢。

3 个答案:

答案 0 :(得分:1)

  • 如果这些POJO是春豆,你可以让它们实现ApplicationContextAware

  • 您可以使用@Configurable将任何pojo变为春豆

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我想知道一种在网络层面上如此强烈依赖的设计。

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

如果您没有服务层,那么添加一个服务层可以让您灵活地在没有Web层或应用服务器的情况下使用它。