AOP的基本概念

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

在Spring AOP中业务逻辑仅仅只关注业务本身,将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

相关注解介绍

@Aspect:作用是把当前类标识为一个切面供容器读取
@Pointcut:Pointcut是植入Advice的触发条件。每个Pointcut的定义包括2部分,一是表达式,二是方法签名。方法签名必须是 public及void型。可以将Pointcut中的方法看作是一个被Advice引用的助记符,因为表达式不直观,因此我们可以通过方法签名的方式为 此表达式命名。因此Pointcut中的方法只需要方法签名,而不需要在方法体内编写实际代码。
@Around:环绕增强,相当于MethodInterceptor
@AfterReturning:后置增强,相当于AfterReturningAdvice,方法正常退出时执行
@Before:标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有
@AfterThrowing:异常抛出增强,相当于ThrowsAdvice
@After: final增强,不管是抛出异常或者正常退出都会执行

 @Around日志使用实例

package com.wildcatcloud.wildcat.common.log.aspect;import com.wildcatcloud.wildcat.common.log.annotation.SysLog;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;/*** @author samuelQin* @description* 操作日志AOP* 使用spring event异步入库*/
@Slf4j
@Aspect
@AllArgsConstructor
public class SysLogAspect {@SneakyThrows@Around("@annotation(sysLog)")public Object around(ProceedingJoinPoint point, SysLog sysLog) {String strClassName = point.getTarget().getClass().getName();String strMethodName = point.getSignature().getName();log.debug("[类名]:{},[方法]:{}", strClassName, strMethodName);//        SysLog logVo = SysLogUtils.getSysLog();
//        logVo.setTitle(sysLog.value());// 发送异步日志事件Long startTime = System.currentTimeMillis();Object obj = point.proceed();Long endTime = System.currentTimeMillis();
//        logVo.setTime(endTime - startTime);
//        publisher.publishEvent(new SysLogEvent(logVo));return obj;}}

@Aspect 用法相关推荐

  1. @Aspect中@Pointcut 12种用法

    本文主要内容:掌握@Pointcut的12种用法. Aop相关阅读 阅读本文之前,需要先掌握下面3篇文章内容,不然会比较吃力. Spring系列第15篇:代理详解(java动态代理&CGLIB ...

  2. @aspect注解类不生效_Spring Boot从入门到精通(三)常用注解含义及用法分析总结...

    Spring Boot是目前非常流行的框架,而注解是Spring Boot的核心功能,接下来主要说一说Spring Boot常用注解的含义以及部分注解在项目中的使用方法. @RestControlle ...

  3. @Aspect注解用法

    本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在s ...

  4. springAOP监控操作日志的开发,注解@aspect的用法

    Spring使用的AOP注解分为三个层次: 前提条件是在xml中放开了<aop:aspectj-autoproxy proxy-target-class="true"/> ...

  5. Spring系列之@Aspect中@Pointcut 12种用法

    先了解几个概念 文中会涉及几个概念,先了解一下. target 用来表示目标对象,即需要通过aop来增强的对象. proxy 代理对象,target通过aop增强之后生成的代理对象. AspectJ ...

  6. aspect 方法入参 获取_谈谈Spring AOP中@Aspect的高级用法示例

    前言 本文主要跟大家分享介绍了关于Spring AOP中@Aspect的高级用法,下面话不多说了,来随着小编一起看看详细的介绍吧. 1 切点复合运算 支持在切点定义中加入以下运算符进行复合运算: 运算 ...

  7. Castle DynamicProxy基本用法(AOP)

    本文介绍AOP编程的基本概念.Castle DynamicProxy(DP)的基本用法,使用第三方扩展实现对异步(async)的支持,结合Autofac演示如何实现AOP编程. AOP 百科中关于AO ...

  8. python装饰器原理-Python函数装饰器原理与用法详解

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  9. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行 ( 定义连接点注解 | 定义 Aspect 切面 | 定义切入点 | 逐个处理切入点的各个连接点 )

    文章目录 一.定义 Join Point 连接点注解 二.定义 Aspect 切面 1.定义 Aspect 切面 2.定义 Aspect 切面 3.逐个处理切入点的各个连接点 4.完整 Aspect ...

最新文章

  1. 给小孩发布一个有趣的网站 在线动物园
  2. 基于头皮脑电的癫痫分类
  3. 《Verilog HDL那些事儿》PDF 3.0版本发布
  4. python画直方图成绩分析-使用Python绘制直方图和正态分布曲线
  5. Solr的自动完成实现方式(第三部分:Suggester方式续)
  6. centos下mysql多实例安装3306、3307实例(2014-10-15)
  7. 光遇安卓服务器维修,《光遇》渠道服更换手机解决办法
  8. 构建第一个Spring Boot2.0应用之项目创建(一)
  9. linux下运行class,在Linux下可用Wine安装和运行AIclass、希沃白板5
  10. 跟我一起学C++课程笔记(第一天)
  11. JDK自带的native2ascii工具完全揭密
  12. js运算符优先级速查表
  13. Pix4D生成正射影像和DSM详细教程(可下载)
  14. 熟女给老实木讷男孩的恋爱建议(转帖)
  15. 参考文献格式生成器(GB/T 7714-2015)
  16. 怎么把JAVA32位改成64位_win732位改成64位教程
  17. 使用DeepWalk从图中提取特征
  18. 把云之讯音视频Demo从Eclipse转到AndroidStudio上
  19. later与late 的区别
  20. vsCode如何查看某一行代码是谁写的

热门文章

  1. CSDN莫名其妙封号
  2. 可视化小目标--如何提升数据可视化的表现效果
  3. 【Opencv项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)
  4. java md5 加密工具类_JavaMD5加密工具类
  5. Django账号登陆之退出登录(logout()方法介绍、logout()方法使用)
  6. python爬取凤凰新闻网_python爬取凤凰网站的新闻,及其链接地址,来源,时间和内容,用selenium自动化和requests处理数据...
  7. 关于GIT怎么将本地仓库和远程仓库进行关联
  8. 图像形状及数量识别(matlab实现)
  9. Android中使用ADB 命令安装和卸载系统程序
  10. win怎么查看显示器大小,显示器是多少寸,查看显示器尺寸