springboot中的事件监听

1:spring基本内建event

ContextRefreshedEvent:当ApplicationContext容器初始化完成或者被刷新的时候,就会发布该事件  ,就是调用refresh。

ContextStartedEvent:当ApplicationContext启动的时候发布事件,即调用ConfigurableApplicationContext接口的start方法的时候

ContextStoppedEvent:当ApplicationContext容器停止的时候发布事件,即调用ConfigurableApplicationContext的close方法的时候

ContextClosedEvent,当ApplicationContext关闭的时候发布事件,即调用ConfigurableApplicationContext的close方法的时候,关闭指的是所有的单例Bean都被销毁。

RequestHandledEvent  只能用于DispatcherServlet的web应用,Spring处理用户请求结束后,系统会触发该事件。

2:自定义事件

 实现方法:
自定义需要发布的事件类,需要继承ApplicationEvent类或PayloadApplicationEvent<T>(该类也仅仅是对ApplicationEvent的一层封装)
使用@EventListener来监听事件
使用ApplicationEventPublisher来发布自定义事件(@Autowired注入即可)

    1 :创建事件, 新建类继承ApplicationContextEvent继承ApplicationEvent或相应子类    


public class UserRegisterEvent extends ApplicationEvent {

	private static final long serialVersionUID = 1L;

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

4.2版本之后,不再强制要求继承ApplicationEvent,非ApplicationEvent子类的对象将被包装成PayloadApplicationEvent,其源码中的payload既我们传入的事件对象。

2.创建监听类

   1. 使用注解@EventListener(在spring4.2版中,允许在任一bean的对应方法上注解@EventListener来标记该bean实现了listener方法)

//监听事件
@EventListener
public void listenEvent( UserRegisterEvent   event) {
      System.out.println("监听到event事件; 接收到的值:" + event.getData() + ";发布的时间为" + Instant.ofEpochMilli(event.getTimestamp()));
}

   2 实现 ApplicationListener接口

   


public class MyEventListener implements ApplicationListener<UserRegisterEvent   >{
    @Override
    public void onApplicationEvent(UserRegisterEvent   event) {
        log.info("from MyEventListener :" + event);
        log.info("event type: "+event.getClass());
    }
    
}

   3. 使用ApplicationEventPublisher来发布自定义事件(@Autowired注入即可)(或者ApplicationContext)

@Service
public class UserService {
	
	@Autowired
	ApplicationEventPublisher applicationEventPublisher;
	
	public void register(String username) {
		System.out.println("用户:" + username + "注册成功!");
		
		applicationEventPublisher.publishEvent(new UserRegisterEvent(username));
	}

}

如果需要异步则需要开启异步支持,在监听器方法加上@Async 注解即可

前提是开始事件异步

springboot开启事件异步设置:


@SpringBootApplication
@MapperScan("com.pengshu.magicwallet.mapper")
@PropertySource("classpath:authority.properties")
@EnableTransactionManagement
@EnableAsync //开启spring事件异步设置,加@Async注解
public class MagicWalletAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(MagicWalletAdminApplication.class, args);
    }

在监听器方法加上@Async 注解即可:

代码地址  https://gitee.com/guoleibo/spring--event-demo.git

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值