SpringBoot中ApplicationListener事件监听有哪几种方式呢?
下文笔者讲述几种在SpringBoot中事件监听的实现方式,如下所示
SpringBoot事件监听的实现思路
方式1: 向ApplicationContext中添加监听器 方式2: 将监听器作为组件交给spring容器管理 方式3: 在application.properties中配置监听器context.listener.classes 方式4: 使用@EventListener注解实现事件监听 方式5: 通过配置spring.factories的方式注册事件 方式6: 通过实现接口org.springframework.context.ApplicationContextInitializer 获取context 然后通过相应的方法添加监听器例
Event事件
import org.springframework.context.ApplicationEvent;
public class TestEvent extends ApplicationEvent {
public TestEvent(Object source) {
super(source);
}
}
一、向ApplicationContext中添加监听器
public class TestListener1 implements ApplicationListener<TestEvent> {
Logger logger = LoggerFactory.getLogger(TestListener1.class);
@Override
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener1.class.getName(), event.getSource()));
}
}
spring上下文中加入监听器
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
//装载监听
context.addApplicationListener(new TestListener1());
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
}
将监听器组件交给spring容器管理
@Component
public class TestListener2 implements ApplicationListener<TestEvent> {
Logger logger = LoggerFactory.getLogger(TestListener2.class);
@Override
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener2.class.getName(), event.getSource()));
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
在application.properties中配置监听器context.listener.classes
public class TestListener3 implements ApplicationListener<TestEvent> {
Logger logger = LoggerFactory.getLogger(TestListener3.class);
@Override
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener3.class.getName(), event.getSource()));
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
使用@EventListener注解实现事件监听
@Component
public class TestListener4 {
Logger logger = LoggerFactory.getLogger(TestListener4.class);
@EventListener
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener4.class.getName(), event.getSource()));
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
配置spring.factories
public class TestListener5 implements ApplicationListener<TestEvent> {
Logger logger = LoggerFactory.getLogger(TestListener5.class);
@Override
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener5.class.getName(), event.getSource()));
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
借助实现接口org.springframework.context.ApplicationContextInitializer,获取context
public class TestListener6 implements ApplicationListener<TestEvent> , ApplicationContextInitializer {
Logger logger = LoggerFactory.getLogger(TestListener6.class);
@Override
public void onApplicationEvent(TestEvent event) {
logger.info(String.format("%s 监听到事件源:%s.", TestListener6.class.getName(), event.getSource()));
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
applicationContext.addApplicationListener(new TestListener6());
}
}
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(Application.class);
springApplication.addInitializers(new TestListener6());
ConfigurableApplicationContext context = springApplication.run(args);
//发布事件
context.publishEvent(new TestEvent("启动时作出如下动作!"));
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


