我有一个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。
感谢。
答案 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层或应用服务器的情况下使用它。