Rumah > Java > javaTutorial > Cara Springboot menggunakan anotasi tangkapan Aop untuk melaksanakan pelaksanaan tak segerak perniagaan

Cara Springboot menggunakan anotasi tangkapan Aop untuk melaksanakan pelaksanaan tak segerak perniagaan

WBOY
Lepaskan: 2023-05-23 19:01:04
ke hadapan
1253 orang telah melayarinya

1. Mula-mula, mari kita bincangkan tentang beberapa cara untuk membuat urutan (senarai ringkas)

1 Warisi kelas Thread dan mengatasi kaedah run:

public class ExtendsThread extends Thread{
    @Override
    public void run() {
        try{
            System.out.println(Thread.currentThread().getName()+"执行");
        }catch (Exception e){
 
        }
    }
    public static void main(String[] args) {
        new Thread(new ExtendsThread()).start();
    }
}
Salin selepas log masuk

2 dan timpa run benang (dicipta di sini menggunakan rangka kerja kolam benang yang disediakan Pelaksana Kolam benang):

public class ImplementsRunnable implements Runnable{
    @Override
    public void run() {
        try{
            System.out.println(Thread.currentThread().getName()+"执行");
        }catch (Exception e){
 
        }
    }
    public static void main(String[] args) {
        new Thread(new ImplementsRunnable()).start();
        //这里还可以使用匿名内部类的写法创建一个线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"执行");
            }
        },"匿名内部类实现Runnable接口的线程");
    }
}
Salin selepas log masuk

2. Mari kita bincangkan tentang anotasi @Async yang disertakan dengan spring untuk melaksanakan tugas tak segerak

Ia sebenarnya sangat mudah , hanya letakkan anotasi @EnableAsync pada kelas permulaan aplikasi Dayakan penggunaan anotasi tak segerak, dan kemudian tandakan @Async pada kaedah kelas perniagaan.

public class CallableAndFuture implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(3000);
        System.out.println(Thread.currentThread().getName()+"执行");
        return "success";
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> futureTask = new FutureTask<>(new CallableAndFuture());
//        futureTask.run();   主线程执行call方法
        new Thread(futureTask).start();
        String result = futureTask.get();
        System.out.println(result);
    }
}
Salin selepas log masuk

Kaedah kelas perniagaan (contoh):

public class Executor {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        executorService.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"执行");
            }
        });
    }
}
Salin selepas log masuk

3 Kemudian mari reka bentuk cara menggunakan anotasi tersuai untuk melaksanakan tugas tak segerak

Mula-mula kita menulis anotasi:

@SpringBootApplication
@EnableAsync
public class AopApplication {
    public static void main(String[] args) {
        SpringApplication.run(AopApplication.class, args);
    }
}
Salin selepas log masuk

Kami menetapkan nilai dalam anotasi kepada jenis Boolean, untuk menentukan penciptaan urutan tak segerak berdasarkan nilai benar atau palsunya.

Kami meletakkannya pada kaedah kelas perniagaan:

   @Async
    public void insertDb(){
        /*service code......*/
        System.out.println("2----->收到请求,写入数据库  ");
    }
Salin selepas log masuk

Kemudian kami menggunakan AOP untuk mengimbas anotasi ini:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAsync {
    //规定value是异步开关
    boolean value() default false;
}
Salin selepas log masuk

Kami dapat melihat bahawa kami menggunakan Around untuk mencari benang untuk pelaksanaan Selepas menangkap timbunan kaedah yang mengandungi anotasi, objek titik sambungan yang sepadan boleh diperolehi.

Menggunakan kaedah getSignture objek titik sambungan ProcedJoinPoint untuk mendapatkan tandatangan, tandatangan boleh dipaksa untuk ditukar kepada kaedah tandatangan jenis MethdSignture, supaya kaedah getMethod jenis ini boleh digunakan untuk mendapatkan kaedah itu sendiri, dan kemudian anotasi kaedah boleh diperolehi Gunakan atribut anotasi untuk mendapatkan nilai benar atau salah nilai secara langsung, dengan itu menentukan sama ada kaedah itu diluluskan secara serentak atau tak segerak. (Kod sumber menggunakan mekanisme pantulan).

Atas ialah kandungan terperinci Cara Springboot menggunakan anotasi tangkapan Aop untuk melaksanakan pelaksanaan tak segerak perniagaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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