这篇主要是讲解了Springboot中使用监听器,配置所需要的依赖包(POM.xml)放在下面,以保证不会出现依赖包出错这种情况。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
都是依赖于上述的包来做的
第一种方法是配置类的方式
需要配置一个事件类和一个事件监听类,然后在application中初始化两个类,就可以正使用监听器,来监听方法了,直接演示
配置事件类,如下所示(必须继承与ApplicationEvent,表明这是一个事件类)
import org.springframework.context.ApplicationEvent;
//定义一个自定义事件继承ApplicationEvent类,才能够被监听到
public class Controll extends ApplicationEvent {
public Controll(Object source) {
super(source);
}
}
配置监听类:如下所示(必须实现接口ApplicationListener然后重写当中的监听事件方法onApplicationEvent)
public class MyapplicationListener implements ApplicationListener<Controll> {
public void onApplicationEvent(Controll event){
System.out.println("接收到事件"+event.getClass());
}
}
配置测试类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(DemoApplication.class);
//配置事件监听器
application.addListeners(new MyapplicaitonListener());
ConfigurableApplicationContext context = application.run(args);
//发布事件
context.publishEvent(new Controll(new Object()));
}
}
我们运行一下,看一下测试出来的结果
我们在当中可以看到,其实就是在application中挂载事件监听器,所以就new一个监听器在当中,然后进行,先进行事件的监听,就先暴露监听器,然后当事件发布的时候,就会对事件开始监听,监听到触发当中的事件
第二种:使用@Component和@EventListener来监听
因为刚刚使用的配置的监听事件类中,我们使用的采用了泛型的形式,只接受了一个Controller的事件类,但事实上,当我们使用@EventListener就不用在实现接口了,就可以接受任意类型的事件进来,当触发了,我们就调用,现在我们尝试一下(注意:我把事件类也注释掉,看看会监听到什么)
配置监听事件类
@Component
public class MyapplicaitonListener {
@EventListener
public void onApplicationEvent(Object event) {
System.out.println("接收到事件"+event.getClass());
}
}
配置测试类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(DemoApplication.class);
//配置事件监听器
ConfigurableApplicationContext context = application.run(args);
//发布事件
context.publishEvent(new Controll(new Object()));
}
}
有些小伙伴可能有疑问,为什么application.addListeners(new MyapplicaitonListener());被删掉了,其实这是配置这两个注解之后,这行就被代替了,已经没用了,所以去除了,不过你添加上也是会报错的!
测试结果如下
看结果就知道,监听到很多的事件,所以我们就可以通过这样的监听器,来对我们的事件进行监听之后在做操作,这在公司的业务上是经常使用到的,记住方法就行。