在春季启动时执行方法

当应用程序第一次启动时,是否有Spring 3的特性来执行某些方法? 我知道我可以使用@Scheduled注释来设置一个方法,它会在启动后立即执行,但它会定期执行。

谢谢。


如果通过“应用程序启动”,你的意思是“应用程序上下文启动”,那么是的,有很多方法可以做到这一点,最简单的(对于单身bean,无论如何)是用@PostConstruct注释你的方法。 看看链接,看看其他选项,但总的来说它们是:

  • @PostConstruct注解的方法
  • afterPropertiesSet()InitializingBean回调接口定义
  • 自定义配置的init()方法
  • 从技术上讲,这些都是钩入bean生命周期,而不是上下文生命周期,但在99%的情况下,这两者是等价的。

    如果您需要专门挂接上下文启动/关闭,则可以实现Lifecycle界面,但可能不需要。


    这很容易用ApplicationListener完成。 我得到这个来听取Spring的ContextRefreshedEvent

    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;
    
    @Component
    public class StartupHousekeeper implements ApplicationListener<ContextRefreshedEvent> {
    
      @Override
      public void onApplicationEvent(final ContextRefreshedEvent event) {
        // do whatever you need here 
      }
    }
    

    应用程序侦听器在Spring中同步运行。 如果你想确保你的代码只执行一次,只需在组件中保留一些状态即可。

    UPDATE

    与春天开始4.2+,你也可以使用@EventListener注释观察ContextRefreshedEvent (感谢@bphilipnyc指出这一点):

    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;
    
    @Component
    public class StartupHousekeeper {
    
      @EventListener(ContextRefreshedEvent.class)
      public void contextRefreshedEvent() {
        // do whatever you need here 
      }
    }
    

    在Spring 4.2中,你现在可以简单地做到:

    @Component
    class StartupHousekeeper {
    
        @EventListener(ContextRefreshedEvent.class)
        void contextRefreshedEvent() {
            //do whatever
        }
    }
    
    链接地址: http://www.djcxy.com/p/50897.html

    上一篇: Execute method on startup in spring

    下一篇: Getting Spring Application Context