我有一个 Play 2 应用程序,它使用 Guice 将一个静态对象(一个实时传感器监控对象)注入(inject)到 Application.java 中:
Controller 。应用程序:
public class Application extends Controller {
@Inject static MonitorService monitorService;
...
}
module.Dependencies:
public class Dependencies {
....
@Provides
@Singleton
public MonitorService getMonitorService(final MonitorFactory factory) {
return new MonitorService(factory){
@Override
public MonitorService(Factory factory){
return factory.getMonitor();
}
}
}
}
我的问题是,我想在 Play 应用程序退出时访问 factory 或 monitor 对象,以便正常关闭它。我查看了 Hook 到 GlobalSettings.onStop,但看不到从 Play.Application 对象中提取引用的方法。我已尝试将 MonitorService 注入(inject)到 Global 类中,但它返回一个空对象,因此我假设 Dependencies 对象已在此阶段被销毁。
我也知道这种方法可能是完全错误的;)
非常感谢任何帮助。
最佳答案
我假设您使用的是 Typesafe plugin .
AFAIK,不幸的是,there is no listener when the plugin关闭时,有一个 onStart() 方法,但没有任何 onStop() 方法
。
因此,要么你 fork 插件,要么你自己将 Guice 集成到 Global 对象的 onStart/onStop 方法中。
关于java - 如何在 Play2 应用程序退出时访问静态注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596323/