Spring 自定义监听事件

1.我们需要定义一个事件(MyTestEvent ) , 需要继承 Spring 的 ApplicationEvent 类

public class MyTestEvent extends ApplicationEvent {
    
    public MyTestEvent(Object source) {
        super(source);
    }
}

2.注册事件

@SpringBootApplication
public class NmpJainSipApplication implements ApplicationRunner {

    @Autowired
    private ApplicationContext applicationContext;

    public static void main(String[] args) {
        SpringApplication.run(NmpJainSipApplication.class, args);
    }

    //@EventListener监听自定义事件
    //对应的方法传入的参数 , 是哪个类就是监听的哪个自定义事件
    @EventListener
    public void testEvent(MyTestEvent test){
        System.out.println("我触发了...............");
    }

    //该方法是SpringIOC容器加载完后执行,需要实现ApplicationRunner接口 ,为了演示方便 ,我们在这里注册自定义事件
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        //注册自定义事件 , 就是new一下自定义事件
        applicationContext.publishEvent(new MyTestEvent(new Object()));
    }
}

3.还可以在自定义事件中 , 添加属性

public class MyTestEvent extends ApplicationEvent {
    //属性1
    private RedisHelper redisHelper;
    //属性2
    private KafkaTemplate kafkaTemplate;

    public MyTestEvent(Object source,RedisHelper redisHelper, KafkaTemplate kafkaTemplate) {
        super(source);
        this.redisHelper = redisHelper;
        this.kafkaTemplate = kafkaTemplate;
    }

    public RedisHelper getRedisHelper() {
        return redisHelper;
    }

    public KafkaTemplate getKafkaTemplate() {
        return kafkaTemplate;
    }
}

4.注册事件

@SpringBootApplication
public class NmpJainSipApplication implements ApplicationRunner {

    @Autowired
    private ApplicationContext applicationContext;

    @Autowired
    private RedisHelper redisHelper;

    @Autowired
    private KafkaTemplate kafkaTemplate;

    public static void main(String[] args) {
        SpringApplication.run(NmpJainSipApplication.class, args);
    }

    //@EventListener监听自定义事件
    //对应的方法传入的参数 , 是哪个类就是监听的那个自定义事件
    @EventListener
    public void testEvent(MyTestEvent test){
        System.out.println("我触发了...............");
        KafkaTemplate kafkaTemplate = test.getKafkaTemplate();
        RedisHelper redisHelper = test.getRedisHelper();
        System.out.println(kafkaTemplate+"==========="+redisHelper);
    }

    //该方法是SpringIOC容器加载完后执行,需要实现ApplicationRunner接口 ,为了演示方便 ,我们在这里注册自定义事件
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        //注册自定义事件 , 就是new一下自定义事件
        applicationContext.publishEvent(new MyTestEvent(new Object(),redisHelper,kafkaTemplate));
    }
}

猜你喜欢

转载自www.cnblogs.com/dmxk/p/11693024.html