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("启动时作出如下动作!")); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。