我是 spring 新手,我正在尝试弄清楚如何将对象自动连接到控制器。该对象是在运行时从使用 ServletContextListener 启动和停止的任务创建的。我如何告诉 spring 应用程序上下文关于这个对象?
更多细节
我的后台任务从下面的代码开始。我想要alertServer
连接到控制器的对象。我可以修改这个类来做到这一点吗?
@WebListener
public class ExecutorContextListener implements ServletContextListener
{
private static Logger log = Logger.getLogger(ExecutorContextListener.class);
Thread backgroundThread;
AlertServer alertServer;
@Override
public void contextInitialized(ServletContextEvent event)
{
// Start the AlertServer
alertServer = new AlertServer();
backgroundThread = new Thread(alertServer, "AlertServer");
backgroundThread.start();
}
@Override
public void contextDestroyed(ServletContextEvent event)
{
alertServer.stop();
try
{
backgroundThread.join();
}
catch (InterruptedException e)
{
log.error("contextDestroyed Exception", e);
}
}
}
更新
提供的评论和答案对找到解决方案非常有帮助。通过 Sotirios Delimanolis 和 Dave Newton 提供的信息,我意识到现在我正在 Spring 之上构建我的解决方案,我实际上并不需要首先使用 ServletContextListener。我真正想做的就是启动一个可用于 Spring 控制器的后台线程,所以我将这段代码放在我的 servlet-context.xml 中,然后我就可以运行了。
<beans:bean id="alertServer" class="com.springmvcproj.AlertServer">
<beans:property name="serverPort" value="56543" />
</beans:bean>
<beans:bean id="AlertServerThread" class="java.lang.Thread" init-method="start">
<beans:constructor-arg ref="alertServer"/>
</beans:bean>