首页 > 其他分享 >aop

aop

时间:2024-07-02 21:43:18浏览次数:15  
标签:连接点 System -------------------- aop println public out

@Aspect
@Component
public class LogAspect {
/**
* 定义切入点,切入点为 spring.aop.ProductController 类下的所有方法
/
@Pointcut("execution(public * spring.aop.ProductController.
(..))")
public void log() {
}
/**
* 前置通知:在连接点方法执行之前执行
/
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
System.out.println(("-------------------- 前置通知逻辑 --------------------"));
}
/
*
* 后置通知:在连接点方法执行之后执行,即使连接点方法发生异常也会执行
/
//@After("log()")
public void doAfter() {
System.out.println("-------------------- 后置通知逻辑 --------------------");
}
/
*
* 返回通知:在连接点方法返回结果后执行,即连接点方法若发生异常则不会执行
* str为方法返回值的引用,参数名称可以自定义
/
//@AfterReturning(pointcut = "log()", returning = "str")
public void doAfterReturning(Object str) {
System.out.println("返回通知逻辑..." + str);
}
/
*
* 异常通知:在连接点方法发生异常之后执行
/
//@AfterThrowing("log()")
public void doAfterThrowing() {
System.out.println("异常通知逻辑...");
}
/
*
* 环绕通知:在连接点方法执行之前和执行之后执行
*/
//@Around(value = "log()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) { // 其它通知类型的方法也可以加上形参 ProceedingJoinPoint proceedingJoinPoint
System.out.println("-------------------- 环绕通知执行开始 --------------------");
Object result = null;
//获取方法所需参数
Object[] args = proceedingJoinPoint.getArgs();
System.out.println("aaa...");
try {
result = proceedingJoinPoint.proceed(args);
System.out.println("bbb...");
} catch (Throwable throwable) {
throwable.printStackTrace();
System.out.println("ccc...");
}finally {
System.out.println("result : {} " + result);
System.out.println("ddd...");
}
System.out.println("-------------------- 环绕通知执行结束 --------------------");
// 返回结果,此处可改变方法的返回结果
//return result;
return null;
}
}
@Component
public class ProductController {
public String save() {
System.out.println("保存产品信息");
//int i = 1/0;
return "hello";
}
}

标签:连接点,System,--------------------,aop,println,public,out
From: https://www.cnblogs.com/chaoshang8/p/18280592

相关文章

  • 【Spring Boot】Spring AOP中的环绕通知
    目录一、什么是AOP?二、AOP的环绕通知2.1切点以及切点表达式2.2连接点2.3通知(Advice)2.4切面(Aspect)2.5不同通知类型的区别2.5.1正常情况下2.5.2异常情况下2.6统一管理切点@PointCut一、什么是AOP?AspectOrientedProgramming(面向切面编程)AOP是Spring框......
  • 【Springboot】基于AOP实现操作日志记录
    基于AOP实现操作日志记录文章目录基于AOP实现操作日志记录前言一、AOP1.介绍2.AOP核心概念二、基于AOP实现操作日志记录1.准备工作2.创建自定义注解和切面类3.实现日志记录总结前言 在springboot项目中,往往需要在用户完成某些操作(例如:增,删,改)时,能够将相关操作信......
  • aop的两种配置方法
    一、实现接口并重写方法实现org.aopalliance.intercept.MethodInterceptor接口,这是AOPAlliance规范中的接口,SpringAOP支持它。这种方式比较适合需要非常细粒度控制的场景。importorg.aopalliance.intercept.MethodInterceptor;importorg.aopalliance.intercept.MethodInvoc......
  • Spring的AOP概念详解
    AOP详解:1.介绍:面向切面编程,是一种将非业务代码与业务代码进行分离的一种思想,在实际开发中,往往有许多重复操作,例如事务提交,权限验证,保存口志等功能需要在业务代码重复调用,面向切面编程,就是将非业务代码进行抽取,然后在不修改原来代码的前提下,为我们的业务代码,添加额......
  • AOP
    AOP与OOPOOP:面向对象编程。关注于数据和行为的封装,通过类和对象来组织代码。用于构建系统的主体结构,定义数据结构和操作这些数据的方法。AOP:面向切面编程。专注于将横切关注点(如日志记录、事务管理、安全性等)与业务逻辑分离,从而提高模块化和代码重用。通常用于处理那些在多......
  • java干货 spring aop的理解和使用
    文章目录一、AOP概念1.1aop思想1.2aop应用场景二、aop如何使用2.1八个核心名词2.2代码实现一、AOP概念1.1aop思想APO(面向切面编程)是一种编程思想,它通过将通用的横向关注点(日志、事务、权限控制等)与业务逻辑分离,实现解耦,使得代码更易于维护。核心......
  • SpringBoot+AOP+Redis自定义注解实现防重复提交
    1.哪些因素会引起重复提交?开发项目过程中可能会出现下面这些情况:前端下单按钮重复点击导致订单创建多次网速等原因造成页面卡顿,用户重复刷新提交请求黑客或恶意用户使用Postman等http工具重复恶意提交表单2.重复提交会带来哪些问题?重复提交带来的问题:会导致数据......
  • DataOps真能“降本增效”?
    在各行各业中,越来越多的公司开始重视收集数据,并寻找创新方法来获得真实可行的商业成果,并且愿意投入大量时间和金钱来实现这一目标。据IDC称,数据和分析软件及云服务市场规模在2021年达到了900亿美元,随着企业继续对人工智能和机器学习(AI/ML)和现代数据计划进行投资,预计到2......
  • 【AOP问题处理】:AopContext.currentProxy()方法异常处理:java.lang.IllegalStateExcept
    原因是代理对象内部方法的调用不会触发AOP代理。先看代码:自定义了一个注解:importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;//使用元注解......
  • .NET Core 3.x 基于AspectCore实现AOP,实现事务、缓存拦截器
    最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理。给一个方法加一个缓存特性,那这个方法就会进行缓存。这个也是网上说的面向切面编程AOP。AOP的概念也很好理解,跟中间件差不多,说白了,就是我可以任意地在方法的前面或后面添加代码......