SpringBoot 事件

事件机制在java的设计模式中也可以叫监听器模式或者是观察者模式。 当有事件发生时,通知关注次事件的对象发送消息,告诉它有一个事件发生了,那么怎么知道通知谁呢? 那必须要在对这个事件感兴趣的对象中定义这个事件,一旦有事件发生了,对事件有兴趣的对象就知道了。

首先,使用事件机制有什么好处呢?我觉得最重要的一点就是避免了在代码中到处添加相同代码的问题,而且也可以对程序进行松耦合的设计。那么我们什么时候用事件机制呢?第一,当有多个代码块中需要引用相同代码的时候。第二,发生的这个操作或者代码不需要立即执行的,可以异步的。

SpringBoot中支持的事件类型定在org.springframework.boot.context.event包中,目前支持的事件类型有如下6种:

  • ApplicationFailedEvent

  • ApplicationPreparedEvent

  • ApplicationReadyEvent

  • ApplicationStartedEvent

  • SpringApplicationEvent

  • ApplicationEnvironmentPreparedEvent

132700_p66H_2273688.png

ApplicationStartedEvent:

spring boot 启动监听类。

可以在SpringApplication启动之前做一些手脚,比如修改SpringApplication实例对象中的属性值

ApplicationEnvironmentPreparedEvent:

环境事先准备,spring boot中的环境已经准备ok

可以通过ApplicationEnvironmentPreparedEvent获取到SpringApplication、ConfigurableEnvironment等等信息, 可以通过ConfigurableEnvironment实例对象来修改以及获取默认的环境信息。

ApplicationPreparedEvent:

上下文准备事件。spring boot上下文context创建完成,但此时spring中的bean是没有完全加载完成的。可以通过ApplicationPreparedEvent获取到ConfigurableApplicationContext实例对象。ConfigurableApplicationContext类继承ApplicationContext类,但需要注意这个时候spring容器中的bean还没有被完全的加载,因此如果通过ConfigurableApplicationContext获取bean会报错的。

比如报错:Exception in thread "main" java.lang.IllegalStateException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@69b0fd6f has not been refreshed yet

ApplicationReadyEvent:

上下文已经准备ok。这个时候就可以通过ApplicationReadyEvent获取ConfigurableApplicationContext,然后通过ConfigurableApplicationContext 获取bean的信息。

ApplicationFailedEvent:

spring boot启动异常时执行事件。可以通过ApplicationFailedEvent 获取Throwable实例对象获取异常信息并处理。

在异常发生时,最好是添加虚拟机对应的钩子进行资源的回收与释放,能友善的处理异常信息。 

 

SpringApplicationEvent:

SpringApplicationEvent:获取SpringApplication事件

 

如果想定义自定义事件,请参照下面文章

    https://my.oschina.net/sdlvzg/blog/1594444

转载于:https://my.oschina.net/sdlvzg/blog/1594443

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值