Spring Boot-事件监听
程序员文章站
2022-05-02 12:06:48
...
本文的核心内容:Spring Boot 提供的五种事件,自定义事件。
注入Maven依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
SpringBoot 提供的五种事件
ApplicationStartedEvent springboot启动开始的时候执行的事件,在该事件中可以获取到SpringApplication对象,可做一些执行前的设置。
ApplicationEnvironmentPreparedEvent spring boot 对应Enviroment已经准备完毕,但此时上下文context还没有创建。在该监听中获取到ConfigurableEnvironment后可以对配置信息做操作。
ApplicationPreparedEvent spring boot上下文context创建完成,但此时spring中的bean是没有完全加载完成的。在获取完上下文后,可以将上下文传递出去做一些额外的操作。值得注意的是:在该监听器中是无法获取自定义bean并进行操作的。
ApplicationFailedEvent spring boot启动异常时执行事件,在异常发生时,最好是添加虚拟机对应的钩子进行资源的回收与释放,能友善的处理异常信息
ApplicationReadyEvent springboot 加载完成时候执行的事件
我们需要自定义监听器,实现我们需要的事件 调用初始化方法。
//这里我们监听的是Spring Boot 项目加载完成后的事件
@Component
public class MyApplicationReadyEventListener implements ApplicationListener<ApplicationReadyEvent>{
@Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
//事件触发时执行的业务逻辑
}
}
SpringBoot自定事件
定义事件【事件可以含有各种属性方法等等】
/**
* 定义事件
*
*/
import org.springframework.context.ApplicationEvent;
public class MyEvent extends ApplicationEvent {
public MyEvent(Object source) {
super(source);
}
}
定义监听器监听自定义事件【事件发生时,触发某种操作】
import org.springframework.context.ApplicationListener;
@Component
public class MyApplicationListener implements ApplicationListener<MyEvent> {
public void onApplicationEvent(MyEvent event) {
System.out.println("接收到事件:"+event.getClass());
}
}
发布事件
1)事件接口服务方式
public interface MyEventService{
public void publish(Object obj);
}
2)事件接口服务实现类
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class MyEventServiceImpl implements MyEventService{
/**
* 上下文对象
*/
@Resource
private ApplicationContext applicationContext;
@Override
public void publish(Object obj) {
//通过上下文对象发布监听
applicationContext.publishEvent(new MyEvent(obj));
}
}
通过注入MyEventService,在需要触发事件的时候调用publish方法即可。