七种方式教你在SpringBoot初

本文总结了SpringBoot容器初始化和JavaBean初始化两个维度总计七种可以由开发者自定义的SpringBoot扩展点,开发者可以根据这些扩展点实现消息监听,配置监听,甚至自定义事件,。-订阅的观察者模式。

作者

L责编

欧阳姝黎

我们经常需要在容器启动的时候做一些钩子动作,比如注册消息消费者,监听配置等,今天就总结下SpringBoot留给开发者的7个启动扩展点。

容器刷新完成扩展点

1.1监听容器刷新完成扩展点ApplicationListenerContextRefreshedEvent

基本用法

熟悉Spring的同学一定知道,容器刷新成功意味着所有的Bean初始化已经完成,当容器刷新之后Spring将会调用容器内所有实现了ApplicationListenerContextRefreshedEvent的Bean的onApplicationEvent方法,应用程序可以以此达到监听容器初始化完成事件的目的。

ComponentpublicclassStartupApplicationListenerExampleimplementsApplicationListenerContextRefreshedEvent{privatestaticfinalLoggerLOG=Logger.getLogger(StartupApplicationListenerExample.class);publicstaticintcounter;

OverridepublicvoidonApplicationEvent(ContextRefreshedEventevent){LOG.info("Incrementcounter");counter++;}}易错的点这个扩展点用在web容器中的时候需要额外注意,在web项目中(例如springmvc),系统会存在两个容器,一个是rootapplicationcontext,另一个就是我们自己的context(作为rootapplicationcontext的子容器)。如果按照上面这种写法,就会造成onApplicationEvent方法被执行两次。解决此问题的方法如下:ComponentpublicclassStartupApplicationListenerExampleimplementsApplicationListenerContextRefreshedEvent{privatestaticfinalLoggerLOG=Logger.getLogger(StartupApplicationListenerExample.class);publicstaticintcounter;

OverridepublicvoidonApplicationEvent(ContextRefreshedEventevent){if(event.getApplicationContext().getParent()==null){//rootapplicationcontext没有parentLOG.info("Incrementcounter");counter++;}}}高阶玩法当然这个扩展还可以有更高阶的玩法:自定义事件,可以借助Spring以最小成本实现一个观察者模式:

先自定义一个事件:

publicclassNotifyEventextendsApplicationEvent{privateStringemail;privateStringcontent;publicNotifyEvent(Objectsource){super(source);}publicNotifyEvent(Objectsource,Stringemail,Stringcontent){super(source);this.email=email;this.content=content;}//省略getter/setter方法}注册一个事件监听器ComponentpublicclassNotifyListenerimplementsApplicationListenerNotifyEvent{

OverridepublicvoidonApplicationEvent(NotifyEventevent){System.out.println("邮件



转载请注明地址:http://www.yajiaomua.com/ymjg/6593.html
  • 上一篇文章:
  • 下一篇文章:
  • 热点文章

    • 没有热点文章

    推荐文章

    • 没有推荐文章