【问题标题】:Spring applicationcontext loading hooksSpring 应用上下文加载钩子
【发布时间】:2010-12-16 21:18:58
【问题描述】:

Spring ApplicationContext 加载过程中是否有任何挂钩?

我想在应用程序上下文加载之前运行一段代码(在实例化任何 bean/properties/aspects/etc...之前)。

提前致谢

【问题讨论】:

    标签: spring


    【解决方案1】:

    也许BeanFactoryPostProcessors 会满足您的需求?它们在读取整个 XML 配置文件之后运行,但在实例化任何(其他)bean 之前运行。

    【讨论】:

      【解决方案2】:

      您还可以使用ApplicationListener 接收事件通知,例如 ContextClosedEvent、ContextStartedEvent 或 ContextStoppedEvent。

      更多信息请参见IoC Container 章节。

      【讨论】:

      • 我认为ApplicationListeners 在上下文启动之前 不会收到通知,似乎没有相关事件。
      • 来自 ContextRefreshedEvent JavaDoc:“当 ApplicationContext 被初始化或刷新时引发的事件。”如果事件是在之前初始化或之后发送的,我今晚会检查。
      • 我正在尝试监听 Co​​ntextStartedEvent,但似乎上下文的默认生命周期没有明确调用 start 方法,因此事件没有被发布。默认情况下,我只是指整个 Web 服务器和上下文的启动(我希望触发 ContextStartedEvent)。知道这是为什么吗?
      • 是的,在此期间想通了,但仍然让我感到困惑的是,为什么在初始化时上下文实际上并没有得到刷新。在我看来,由于 ContextRefreshedEvent 被多次触发,它不是你可以依赖的东西,所以 ContextStartedEvent 看起来是唯一有效的选择。我希望在初始化时触发它,如果唯一的方法是在初始化时显式调用:ConfigurableAppicationContext.start(),那么该调用应该在那里。所以我猜现在的问题变成了——为什么不是呢?
      【解决方案3】:

      我刚刚声明了自己的ContextLoaderListener,以便在加载 Spring 上下文之前执行所需的工作。它适用于 web-apps,只需在 Spring 上下文监听器之前声明它:

      public class MyServletContextListener implements ServletContextListener {
      
          @Override
          public void contextDestroyed(ServletContextEvent arg0) {
      
          }
      
          @Override
          public void contextInitialized(ServletContextEvent arg0) {
              //Perform your stuff here
          }
      
      }
      
      <listener>
          <listener-class>
              com.myCompany.listeners.MyServletContextListener</listener-class>
      </listener>
      
      <listener>
          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-15
        • 1970-01-01
        • 2011-05-13
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多