spring监听器使用

本文介绍了如何使用Spring监听器来解决业务耦合问题。在低版本Spring中,通过创建自定义事件和实现ApplicationListener接口来解耦业务操作,如短信发送。而在高版本Spring中,可以使用@EventListener注解简化代码,实现同样功能。这种解耦方法使得业务模块更加独立,易于维护。
摘要由CSDN通过智能技术生成

Spring

监听器demo

使用场景
新增A业务的时候,需要①发短信②子业务同步数据③…
出现问题:业务耦合
实现方案:使用spring监听器解耦

低版本spring,没有 @EventListener注解

先创建新增成功事件

public class ACreateSuccessEvent extends ApplicationEvent {

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

A业务新增成功后发布事件

public class AserviceImpl implements Aservice {
    @Autowired
    private ApplicationContext applicationContext;
    
    @Override
    public save(){
        A a = new A();
        save(a);
        
        // 发布事件,此处(a)传什么值都可以,实现的时候给转一下
        applicationContext.publishEvent(new EmergencyProjectCreateEvent(a));
    }
}

需要执行操作的①②③…等等业务只需要实现ApplicationListener 即可

public class SmsServiceImpl implements SmsService,ApplicationListener<ACreateSuccessEvent> {
     @Override
    public void onApplicationEvent(ACreateSuccessEvent successEvent) {
        Object source = successEvent.getSource();
        if (source != null && source.getClass().isAssignableFrom(A.class)) {
            A a = (A) source;
            // 执行自己的业务
        }
    }
}

spring高一点的版本,有 @EventListener注解,可以写的更简单些

先创建新增成功事件,此处还是一样

public class ACreateSuccessEvent extends ApplicationEvent {

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

A业务新增成功后发布事件,此处一样

public class AserviceImpl implements Aservice {
    @Autowired
    private ApplicationContext applicationContext;
    
    @Override
    public save(){
        A a = new A();
        save(a);
        
        // 发布事件,此处(a)传什么值都可以,实现的时候给转一下
        applicationContext.publishEvent(new EmergencyProjectCreateEvent(a));
    }
}

需要执行操作的①②③…等等业务只需要实现ApplicationListener 即可,此处不同

// public class SmsServiceImpl implements SmsService,ApplicationListener<ACreateSuccessEvent> {
public class SmsServiceImpl implements SmsService {
    // @Override
    // 加上注解,根据参数匹配
    @EventListener
    public void onApplicationEvent(ACreateSuccessEvent successEvent) {
        Object source = successEvent.getSource();
        if (source != null && source.getClass().isAssignableFrom(A.class)) {
            A a = (A) source;
            // 执行自己的业务
        }
    }
}
Spring监听器是一种应用于Spring容器的扩展机制,用于监听Spring容器中的事件,当事件发生时执行相应的处理逻辑。Spring监听器可以监听容器中的各种事件,如容器初始化、容器销毁、Bean初始化、Bean销毁等。 创建Spring监听器的方式有两种: 1. 实现ApplicationListener接口 创建一个类实现ApplicationListener接口,并实现onApplicationEvent方法,该方法会在监听到对应的事件时被调用,可以在该方法中编写相应的处理逻辑。 例如: ```java @Component public class MyApplicationListener implements ApplicationListener<MyApplicationEvent> { @Override public void onApplicationEvent(MyApplicationEvent event) { // 处理逻辑 } } ``` 2. 使用@EventListener注解 在方法上添加@EventListener注解,该方法会在监听到对应的事件时被调用,可以在该方法中编写相应的处理逻辑。 例如: ```java @Component public class MyEventListener { @EventListener public void handleMyEvent(MyApplicationEvent event) { // 处理逻辑 } } ``` Spring监听器的作用和使用: 1. 监听容器事件 Spring监听器可以监听容器初始化、容器销毁等事件,可以在事件发生时执行相应的处理逻辑,如打印日志、清理资源等。 2. 监听Bean事件 Spring监听器可以监听Bean初始化、Bean销毁等事件,可以在事件发生时执行相应的处理逻辑,如对Bean进行初始化、销毁前的清理等。 3. 监听自定义事件 Spring监听器可以监听自定义事件,可以在事件发生时执行相应的处理逻辑,如处理用户注册事件、处理订单支付事件等。 总之,Spring监听器是一个非常实用的扩展机制,可以方便地监听Spring容器中的各种事件,并进行相应的处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值