我们在多个环境中发布相同的Web应用程序。使用普通的ServletContextListener
:
ResourceManager.create()
方法作为一个想法:
@Override
public void contextInitialized(ServletContextEvent sce) {
log.debug("Inizialize context for my web app...");
IEnvironment current = new EnvironmentFactory().getCurrent();
resourceManager = new ResourceManager();
PluginFactory<Plugin> pluginFactory = resourceManager.start(current);
sce.getServletContext().setAttribute(Constants.CORE_PLUGIN_FACTORY_KEY, pluginFactory);
}
这是一个很好的设计(我认为......),因为它完全将创作与用法分开。此外,一旦应用程序启动,无需了解环境。此外,只有Listener持有对资源管理器的引用,该资源管理器具有方法shutdown()
,该方法将在监听器本身的contextDestroyed
方法上调用。另请注意,工厂本身只有一种方法:createPlugin()
。此方法创建一个全新的插件实例(包含业务逻辑API)。
现在,我们开始使用Spring。我想实现相同的结果,也许可以利用here描述的类MyRequestFoo
的机制。
我们希望摆脱上下文存储(可怕,恕我直言),以便需要插件的处理程序可以简单地在签名中添加类型。
但是我被卡住了。任何人都可以提供有效的解决方案吗?有没有办法在Spring启动时初始化提供程序?是否可以在上面的Listener中拥有我们已经拥有的清理功能? (我喜欢在关机时以非常干净的方式释放资源......)。