Spring listener——Spring boot实现监听器的两种方式

我们知道,在spring启动的过程中,会生成很多的监听器,监听整个spring容器的生命周期。那么,我们想要生成自己的listener需要怎么做呢?今天,就给大家带来spring boot实现监听器的两种方式。

自定义事件

自定义事件XiaoAMaCreatedEvent继承ApplicationEvent类

/**
 * [说明]
 *
 * @author xiaoama
 */
public class XiaoAMaCreatedEvent extends ApplicationEvent {

    private String message;

    public XiaoAMaCreatedEvent(Object source) {
        super(source);
    }


    public XiaoAMaCreatedEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

自定义监听器-listener

今天给大家带来两种自定义监听器的创建方式。

方式一

实现ApplicationListener接口,泛型参数传入我们自定义的event事件

/**
 * [说明]
 *
 * @author xiaoama
 */
@Component
public class XiaoAMaListener implements ApplicationListener<XiaoAMaCreatedEvent> {

    @Override
    public void onApplicationEvent(XiaoAMaCreatedEvent event) {
        String message = event.getMessage();
        System.out.println("接受到acceount创建,正在发送创建信息:"+message);
    }
}

方式二

自定义listener类,提供监听的方法processAccountCreatedEvent(方法名可以自定义),接受一个自定义的event事件作为参数,同时添加注解 @EventListener

/**
 * [说明]
 *
 * @author xiaoama
 */
@Component
public class XiaoAMaListener {

    @EventListener
    public void processAccountCreatedEvent(XiaoAMaCreatedEvent event){
        String message = event.getMessage();
        System.out.println("接受到acceount创建,正在发送创建信息:"+message);
    }
}

发布监听事件

可以通过应用上下文applicationcontext的publishEvent方法发布一个监听事件,在启动日志中就能看到我们的监听器的打印日志

@SpringBootApplication
public class App 
{
    public static void main( String[] args )

    {
        //创建一个可执行的spring应用程序
        SpringApplication application = new SpringApplication(App.class);

        ConfigurableApplicationContext context =application.run(args);
  
        context.publishEvent(new XiaoAMaCreatedEvent(new Object(),"create success"));

    }
}

监听器打印日志

2020-11-17 11:02:43.689 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8099 (http) with context path ''
2020-11-17 11:02:43.693 [main] INFO  org.example.App - Started App in 9.453 seconds (JVM running for 12.396)
接受到acceount创建,正在发送创建信息:create success
2020-11-17 11:02:43.704 [main] INFO  o.s.scheduling.concurrent.ThreadPoolTaskExecutor - Shutting down ExecutorService 'applicationTaskExecutor'

或者可以通过引入ApplicationEventPublisher,在我们的方法内部发布一个监听事件。

@RestController
public class XiaoAMaController  {

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

	@GetMapping(value = "/createUser")
    public User create() {
        User user = new CacheUser(); 
        user.setName("xiaoama");
        user.setId(1);
        user.setAddress("cd");
        applicationEventPublisher.publishEvent(new XiaoAMaCreatedEvent(user,"create account success"));
        return user;
    }
}

通过postman调用createUser接口,也可以看到同样的打印信息,表明我们的监听器已经成功的注册到spring的上下文容器中。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot监听器是用于监听应用程序中特定事件的组件,当这些事件发生时,监听器会执行相应的逻辑。 下面是一个简单的使用Spring Boot监听器的示例: 1. 创建一个自定义的监听器类,实现Spring的ApplicationListener接口。例如: ```java public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> { @Override public void onApplicationEvent(ApplicationReadyEvent event) { // 处理应用程序启动完成事件 System.out.println("应用程序已启动!"); } } ``` 2. 在Spring Boot应用程序的入口类中,通过注解@EnableAutoConfiguration或@SpringBootApplication启用自动配置,并通过@ComponentScan扫描自定义监听器类。例如: ```java @EnableAutoConfiguration @ComponentScan public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 运行应用程序时,自定义监听器的onApplicationEvent方法将会在应用程序启动完成时被调用。例如,当应用程序启动完成时,控制台将会打印出"应用程序已启动!"。 此外,Spring Boot还提供了其他类型的监听器,用于监听不同类型的事件,如应用程序启动前事件、应用程序关闭事件等。你可以根据需要实现不同的监听器,并注册到Spring Boot应用程序中。 总结:Spring Boot监听器用于监听特定事件,并在事件发生时执行相应的逻辑。通过自定义监听器类和在入口类中注册监听器,我们可以方便地使用监听器来处理应用程序中的各种事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值