返回顶部
首页 > 资讯 > 精选 >Springboot怎么用Aop捕捉注解实现业务异步执行
  • 633
分享到

Springboot怎么用Aop捕捉注解实现业务异步执行

2023-07-05 20:07:12 633人浏览 薄情痞子
摘要

这篇“SpringBoot怎么用aop捕捉注解实现业务异步执行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springbo

这篇“SpringBoot怎么用aop捕捉注解实现业务异步执行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么用Aop捕捉注解实现业务异步执行”文章吧。

一、先说说线程的几种创建方式(简要列举)

继承Thread类,复写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();    }}

实现Runnable接口,重写run方法:

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

实现Callable接口,使用FutureTask创建线程(可以获得返回值):

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

使用线程池创建线程(这里利用提供的线程池框架Executors创建线程池):

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

二、再聊一聊spring自带的@Async注解实现异步任务的方法

其实很简单,就是在应用程序启动类上打@EnableAsync注解开启异步注解的使用,再在业务类的某个方法上打@Async即可。

@SpringBootApplication@EnableAsyncpublic class AopApplication {    public static void main(String[] args) {        SpringApplication.run(AopApplication.class, args);    }}

业务类方法(举例):

   @Async    public void insertDb(){                System.out.println("2----->收到请求,写入数据库  ");    }

三、那么就来设计一下怎么使用自定义的注解实现异步任务

首先我们写一个注解:

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

我们让注解中的value的值定为布尔类型,从而根据它的真假来决定异步线程的创建。

我们将它打在业务类的方法上:

  @MyAsync(value = true)    public void deleteDb(){                System.out.println("delete------>数据删除");    }

然后我们利用AOP扫描这个注解:

Aspect@Componentpublic class AopUtils {    @Around(value = "@annotation(com.example.aop.Aop异步.MyAsync)")    public void listenMyAsync(ProceedingJoinPoint joinPoint) throws Throwable {        MethodSignature signature = (MethodSignature) joinPoint.getSignature();        Method method = signature.getMethod();        MyAsync annotation = method.getAnnotation(MyAsync.class);        boolean value = annotation.value();        if (value)            new Thread(new Runnable() {                @SneakyThrows                @Override                public void run() {                    joinPoint.proceed();                }            }).start();        else            joinPoint.proceed();    }}

我们可以看到利用Around寻找执行的线程中某个含有注解的方法栈,捕捉到之后就可以获得对应的连接点对象了。

利用可通过连接点对象ProcedJoinPoint的getSignture方法获取签名,可以将签名强制转化成方法签名MethdSignture类型,从而利用该类型的getMethod方法获取方法本身,接下来就可以获取方法的注解,利用注解的属性直接获取value的真假,从而决定方法通过的方式是同步的还是异步的。(源码利用到反射机制)。

以上就是关于“Springboot怎么用Aop捕捉注解实现业务异步执行”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Springboot怎么用Aop捕捉注解实现业务异步执行

本文链接: https://www.lsjlt.com/news/355094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Springboot怎么用Aop捕捉注解实现业务异步执行
    这篇“Springboot怎么用Aop捕捉注解实现业务异步执行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Springbo...
    99+
    2023-07-05
  • Springboot利用Aop捕捉注解实现业务异步执行
    目录一、先说说线程的几种创建方式(简要列举)二、再聊一聊spring自带的@Async注解实现异步任务的方法三、那么就来设计一下怎么使用自定义的注解实现异步任务在开发过程中,尽量会将...
    99+
    2023-05-14
    Springboot业务异步执行 Springboot Aop捕捉注解
  • springboot怎么利用aop实现接口异步
    小编给大家分享一下springboot怎么利用aop实现接口异步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、前言在项目中发现有接口(excel导入数据)处理数据需要耗时比较长的时间,是因为数据量比较大,同时数据的校验...
    99+
    2023-06-22
  • 详解springboot使用异步注解@Async获取执行结果的坑
    目录一、引言 二、获取异步执行结果 1、环境介绍 2、错误的方式 3、正确方式 三、异步执行@Async注解 四、总结 一、引言 在java后端开发中经常会碰到处理多个任务的情况,...
    99+
    2024-04-02
  • springboot怎么实现异步任务
    这篇“springboot怎么实现异步任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“springboot怎么实现异步任务...
    99+
    2023-06-29
  • JavaScript实现异步任务循环顺序执行详解
    目录一、错误的实现简单的错误实现使用 Promise.all 的错误实现二、正确的实现需求场景:数组的元素作为异步任务的参数,循环遍历该数组,并执行异步任务。 一、错误的实现 简单的...
    99+
    2023-03-19
    JavaScript异步任务循环顺序执行 JavaScript异步任务执行 JavaScript异步任务
  • SpringBoot中怎么利用AOP和拦截器实现自定义注解
    本篇内容主要讲解“SpringBoot中怎么利用AOP和拦截器实现自定义注解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中怎么利用AOP和拦截器实现自定义注解”吧!Spri...
    99+
    2023-07-02
  • golang同步执行任务怎么实现
    在Go中,可以通过goroutine和channels来实现任务的同步执行。具体步骤如下: 创建一个通道,用于任务之间的通信。 在...
    99+
    2023-10-22
    golang
  • SpringBoot怎么优雅地实现异步调用
    这篇文章主要讲解了“SpringBoot怎么优雅地实现异步调用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么优雅地实现异步调用”吧!前言同步编程:在同步编程中,任务一...
    99+
    2023-07-05
  • springboot有哪些实现拦截器的方式及异步执行是什么
    这篇文章主要讲解了“springboot有哪些实现拦截器的方式及异步执行是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot有哪些实现拦截器的方式及异步执行是什么”吧!目...
    99+
    2023-06-20
  • 在Spring中AOP怎么使用注解来实现
    这期内容当中小编将会给大家带来有关在Spring中AOP怎么使用注解来实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。spring对AOP的实现提供了很好的支持。下面我们就使用Spring的注解来完成A...
    99+
    2023-05-31
    spring aop
  • springboot定时任务和异步任务怎么实现
    这篇文章主要介绍“springboot定时任务和异步任务怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot定时任务和异步任务怎么实现”文章能帮助大家解决问题。异步任务简单案例...
    99+
    2023-06-27
  • 详解springboot通过Async注解实现异步任务及回调的方法
    目录前言什么是异步调用?1. 环境准备2. 同步调用3. 异步调用4. 异步回调前言 什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必...
    99+
    2024-04-02
  • springboot中怎么实现记录业务日志和异常业务日志操作
    今天就跟大家聊聊有关springboot中怎么实现记录业务日志和异常业务日志操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。日志记录到redis展现形式1.基于注解的方式实现日志记...
    99+
    2023-06-20
  • 使用java注解和aspectj AOP怎么实现打印日志
    本篇文章给大家分享的是有关使用java注解和aspectj AOP怎么实现打印日志,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。首先需要自定义注解:systemName:表示该...
    99+
    2023-06-06
  • 使用多线程执行任务,并获取返回结果,附异步实现
    1 获取又返回结果的 需要用到 callable接口 public class TestTask implements Callable { @Override public Studen...
    99+
    2023-09-01
    java jvm servlet
  • C#怎么使用Task实现执行并行任务
    这篇“C#怎么使用Task实现执行并行任务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#怎么使用Task实现执行并行任务...
    99+
    2023-07-05
  • 怎么实现数据库分区表+dblink异步调用并行
    本篇内容介绍了“怎么实现数据库分区表+dblink异步调用并行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • 怎么用Springboot+mybatis-plus+注解实现数据权限隔离
    今天小编给大家分享一下怎么用Springboot+mybatis-plus+注解实现数据权限隔离的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2023-06-08
  • 使用注解怎么实现一个SpringBoot 接口防刷功能
    这篇文章将为大家详细讲解有关使用注解怎么实现一个SpringBoot 接口防刷功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。项目结构如下:一、编写注解类 AccessLimitpacka...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作