Rumah  >  Artikel  >  Java  >  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
WBOYke hadapan
2023-05-23 19:01:041149semak imbas

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();
    }
}

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接口的线程");
    }
}

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);
    }
}

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()+"执行");
            }
        });
    }
}

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);
    }
}

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----->收到请求,写入数据库  ");
    }

Kemudian kami menggunakan AOP untuk mengimbas anotasi ini:

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

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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam