在启动时创建一个环境感知工厂,为请求提供新插件

时间:2015-08-03 19:48:04

标签: java spring spring-mvc

我们在多个环境中发布相同的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中拥有我们已经拥有的清理功能? (我喜欢在关机时以非常干净的方式释放资源......)。

0 个答案:

没有答案