java - 在 spring 中启动时执行方法

当应用程序首次启动时,是否有 spring 3功能来执行某些方法? 我知道我可以用@Scheduled注释设置一个方法,它只是在启动之后执行,但是它会定期执行。

谢谢。

时间:

如果是"应用程序启动",则是"应用程序上下文启动",那么是 ,有很多方法可以实现这种,最简单的( 对于单例 bean,无论如何) 是用 @PostConstruct 注释你的方法。 查看链接以查看其他选项,但总结如下:

  • @PostConstruct 注释的方法
  • afterPropertiesSet()InitializingBean 回调接口定义
  • 自定义配置的init() 方法

从技术上讲,这些都是钩子 bean的生命周期,而不是环境生命周期,但是在 99%的情况下,这两个是等价的。

如果你需要钩具体上下文启动/关闭,然后你可以实现 Lifecycle 接口相反,但这可能是不必要的。

这很容易用 ApplicationListener 完成。 我让它可以监听 ContextRefreshedEvent的spring:


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 中同步运行。 如果要确保代码只执行一次,只需在组件中保留一些状态。

我们所做的就是扩展 org.springframework.web.context.ContextLoaderListener 在上下文启动时打印内容。


public class ContextLoaderListener extends org.springframework.web.context.ContextLoaderListener
{ private static final yf_terminology_Logger@#@#@#logger_yf_terminology yf_terminology_logger@#@#@#logger_yf_terminology = LoggerFactory.getLogger( ContextLoaderListener.class ); public ContextLoaderListener() { logger.info("Starting application..." ); }
}

web.xml 中配置子类:


 <listener> <listener-class> com.mycomp.myapp.web.context.ContextLoaderListener </listener-class> 
 </listener> 

发布了一个实现WebApplicationInitializer的解决方案,并在实例bean被实例化之前被调用,以防有人有这个用例

用 spring 配置初始化默认区域设置和时区

...