## 一、ApplicationListener概述
>接下来我们首先来看看ApplicationListener的基本概念、一些内置的事件以及使用场景。
## 二、ApplicationListener是什么?
>ApplicationListener可以监听某个事件的event,触发时机可以穿插在业务方法执行过程中,用户可以自定义某个业务事件。但是spring内部也有一些内置事件,这种事件,可以穿插在启动调用中。我们也可以利用这个特性,来自己做一些内置事件的监听器来达到和前面一些触发点大致相同的事情。
## 三、内置事件
>Spring内部也有一些内置事件,这种事件,可以穿插在启动调用中。我们也可以利用这个特性,来自己做一些内置事件的监听器来达到和前面一些触发点大致相同的事情。
**接下来罗列下spring主要的内置事件:**
>(1)ContextRefreshedEvent
- ApplicationContext 被初始化或刷新时,该事件被发布。这也可以在 ConfigurableApplicationContext接口中使用refresh() 方法来发生。此处的初始化是指:所有的Bean被成功装载,后处理Bean被检测并激活,所有Singleton Bean 被预实例化,ApplicationContext容器已就绪可用。
>(2)ContextStartedEvent
- 当使用ConfigurableApplicationContext (ApplicationContext子接口)接口中的 start() 方法启动 ApplicationContext 时,该事件被发布。你可以调查你的数据库,或者你可以在接受到这个事件后重启任何停止的应用程序。
>(3)ContextStoppedEvent
- 当使用ConfigurableApplicationContext 接口中的 stop() 停止 ApplicationContext 时,发布这个事件。你可以在接受到这个事件后做必要的清理的工作
>(4)ContextClosedEvent
- 当使用ConfigurableApplicationContext接口中的 close()方法关闭 ApplicationContext 时,该事件被发布。一个已关闭的上下文到达生命周期末端;它不能被刷新或重启
>(5)RequestHandledEvent
- 这是一个web-specific 事件,告诉所有 bean HTTP 请求已经被服务。只能应用于使用DispatcherServlet的Web应用。在使用Spring作为前端的MVC控制器时,当Spring处理用户请求结束后,系统会自动触发该事件
## 四、使用场景
- 发布订阅/观察者模型,实现业务之间的解耦。
- 比如新增用户完成需要发短信、记录日志等,这些逻辑堆在新增方法的最后面实在不太合理,而且不易复用。
- 对解耦代码有很大的帮助,比如多种业务场景做完都要插入通知消息,每个场景代码在做完业务逻辑,直接发布一个对应的事件,让监听器去处理监听逻辑即可,而不需要每个场景都加这一段代码。
本地测试地址:`http://localhost:8080/order/create`