Rumah > Java > javaTutorial > Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot

Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot

PHPz
Lepaskan: 2023-05-13 19:46:09
ke hadapan
1026 orang telah melayarinya
Dalam model ini, terdapat dua kelas penting, satu adalah acara dan satu lagi adalah pendengar. Acara mesti mewarisi kelas ApplicationEvent dan pemantauan mesti melaksanakan antara muka ApplicationListener.

1. Acara Develop ApplicationEvent

Acara sebenarnya adalah badan mesej yang ingin kami hantar apa yang hendak digunakan, tambah medan yang diperlukan. Mari kita berikan kes.

package com.lsqingfeng.springboot.applicationEvent;
 
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
 
/**
 * @className: MyApplicationEvent
 * @description: 事件封装
 * @author: sh.Liu
 * @date: 2022-03-23 14:41
 */
@Getter
@Setter
@ToString
public class MyApplicationEvent extends ApplicationEvent {
 
    private Integer age;
 
    private String name;
 
    /**
     * 需要重写构造方法
     * @param source
     * @param name
     * @param age
     */
    public MyApplicationEvent(Object source, String name, Integer age) {
        super(source);
        this.name = name;
        this.age = age;
    }
}
Salin selepas log masuk

2. Bangunkan pendengar

Pendengar adalah setara dengan pengguna MQ kami Apabila ada masa untuk menolaknya, kod pendengar boleh dilaksanakan. Di sini kami menetapkan jenis acara kami melalui generik.

package com.lsqingfeng.springboot.applicationEvent;
 
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
 
/**
 * @className: MyApplicationEventListener
 * @description:事件监听器
 * @author: sh.Liu
 * @date: 2022-03-23 14:50
 */
@Component
public class MyApplicationEventListener implements ApplicationListener<MyApplicationEvent> {
 
    @Override
    public void onApplicationEvent(MyApplicationEvent event) {
        System.out.println("收到消息:" + event);
    }
}
Salin selepas log masuk

3. Acara Push

Acara Push memerlukan penggunaan ApplicationEventPublisher. Objek ini sudah berada di dalam bekas apabila bekas Spring dimuatkan. Jadi kita boleh menyuntiknya secara langsung atau menggunakan ApplicationContext, kerana ApplicationContext sendiri mewarisi ApplicationEventPublisher. Mari sahkan melalui Pengawal.

package com.lsqingfeng.springboot.controller;
 
import com.lsqingfeng.springboot.applicationEvent.MyApplicationEvent;
import com.lsqingfeng.springboot.base.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * @className: ApplicationEventController
 * @description:
 * @author: sh.Liu
 * @date: 2022-03-23 15:21
 */
@RestController
@RequestMapping("event")
public class ApplicationEventController {
 
    @Autowired
    private ApplicationContext applicationContext;
 
    @RequestMapping("/push")
    public Result pushEvent(){
        MyApplicationEvent myApplicationEvent = new MyApplicationEvent(this,"zhangsan", 10);
        applicationContext.publishEvent(myApplicationEvent);
        return Result.success();
    }
 
    @RequestMapping("/push3")
    public Result pushEvent2(){
        applicationContext.publishEvent("大家好");
        return Result.success();
    }
}
Salin selepas log masuk

Kami mentakrifkan dua kaedah tolak. Satu menolak jenis MyApplicationEvent kami, dan kaedah lain menolak rentetan.

Apabila kami memanggil kaedah pertama, konsol boleh mencetak maklumat data yang kami tolak.

Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot

Apabila memanggil rentetan tekan, pendengar kami tidak akan melaksanakan Sebabnya ialah pemintas kami telah menambah MyApplicationEvent, yang bermaksud ia hanya akan mendengar jenis MyApplicationEvent mesej. Jenis mesej lain tidak akan didengari.

Apakah kesannya jika kita membuang ubat generik?

Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot

Setiap tekan akan menghantar dua mesej (mungkin ada mekanisme dalaman, saya tidak kisah), tetapi kedua-duanya dicetak, menunjukkan bahawa jika generik tidak ditambah, tidak tidak kira siapa yang menolak , mesej boleh diterima di sini.

4. Melaksanakan pendengar melalui anotasi

Selain membangunkan pendengar dengan melaksanakan antara muka di atas, kami juga boleh melaksanakannya melalui anotasi adalah seperti berikut.

package com.lsqingfeng.springboot.applicationEvent;
 
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
 
/**
 * @className: MyApplicationEventListener2
 * @description: 注解实现监听器
 * @author: sh.Liu
 * @date: 2022-03-23 15:56
 */
@Component
public class MyApplicationEventListener2 {
 
    @EventListener
    public void onEvent(MyApplicationEvent event){
        System.out.println("收到消息2:" + event);
    }
}
Salin selepas log masuk

Anotasi @EventListener ditambahkan di sini untuk menyatakan bahawa ini adalah pendengar. Nama kaedah adalah sewenang-wenangnya, dan parameter dalam kaedah mewakili jenis acara yang akan dipantau.

Panggil kaedah tolak sekali lagi:

Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot

Didapati data kedua-dua pendengar akan dicetak. Setiap orang harus memberi perhatian kepada ciri ini.

Atas ialah kandungan terperinci Cara menggunakan ApplicationEvent dan ApplicationListener dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan