[springboot——01] AOP方式管理
创始人
2025-05-30 19:10:32
0

目录

1.引入依赖 

2.创建增强类

3.写我们的被增强类

4.运行我们的程序,访问 /aoptest

5.应用场景


AOP 概念

  • 切入点 pointcut
  • 通知 advice
  • 切面 aspect = 切入点 + 通知
  • 织入 weaving 将切面加入对象,并创建出代理对象的过程
  • 环绕通知 【最强大、灵活的通知】

1.引入依赖 

org.springframework.bootspring-boot-starter-aop

2.创建增强类

execution 表达式相关文章:AOP(execution表达式)

package com.example.demo.aop;import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;/*** @author: fly* @Date: 2023-03-19 14:50* @Description: 切面类*/
@Aspect
@Component
@Log4j2
public class AopLog {// 线程局部的变量,用于解决多线程中相同变量的访问冲突问题ThreadLocal startTime = new ThreadLocal<>();// 定义切点 com.example.demo 下面的当前包和子包下面的所有类中的所有方法// @Pointcut("execution(* com.example.demo..*.*(..))")// 针对 controller 层的 AopLog 类的 aopTest方法进行测试@Pointcut("execution(String com.example.demo.controller.AopLogController.aopTest())")public void aopWebLog() {}// 前置通知@Before("aopWebLog()")public void doBefore(JoinPoint joinPoint) {// 记录开始时间startTime.set(System.currentTimeMillis());// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();assert attributes != null;HttpServletRequest request = attributes.getRequest();log.info("URL: " + request.getRequestURL().toString());log.info("HTTP方法: " + request.getMethod());log.info("IP地址: " + request.getRemoteAddr());log.info("类的方法: " + joinPoint.getSignature().getDeclaringTypeName() + "." +joinPoint.getSignature().getName());log.info("参数: " + request.getQueryString());}// 方法抛出异常退出时执行的通知@AfterThrowing(pointcut = "aopWebLog()",throwing = "exception")public void addAfterThrowingLog(JoinPoint joinPoint,Exception exception) {log.error("执行 " + "异常",exception);}
}

 拓展知识:通知的分类

  1. @Before 前置通知
  2. @AfterReturning 后置通知
  3. @After 最终通知
  4. @AfterThrowing 异常通知
  5. @Around 环绕通知 【与上面的通知的写法稍微有点区别】
public void around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("[增强类]环绕通知前...");pjp.proceed();System.out.println("[增强类]环绕通知后...");
}

3.写我们的被增强类

 根据切入点,我们可以定位到 被增强类

@Pointcut("execution(String com.example.demo.controller.AopLogController.aopTest())")
@RestController
public class AopLogController {@RequestMapping("/aoptest")public String aopTest() {return "hello aop test!";}
}

4.运行我们的程序,访问 /aoptest

 

 

5.应用场景

  1.  将重复代码进行抽取,即代码简化
  2.  增加特定性功能,即代码增强

拓展资料:

  1. AOP —— 代码重工
  2. AOP(execution表达式)
  3. 谈谈你对IOC和AOP的理解及AOP四种实现方式

相关内容

热门资讯

大学艺术设计学院迎新晚会主持词...  脚踏着青春的节拍,我们向金秋走来,一路欢歌,一路笑语,万物在金秋的九月欣然等待。 激扬着青春的风采...
大学音乐学院迎新晚会主持词 大...  踏着秋风,沐着秋雨,我们相逢在收获的金秋九月,在这丹桂飘香的日子里,我们迎来了一届最新或2023(...
大学学院迎新晚会主持词 迎新晚...  激扬着青春的风采,我们向金秋走来,一路欢歌,一路笑语,万物在翘首期盼中安然舒怀。踏着秋风,沐着秋雨...
新学期一年级新生家长会主持词 ...   又是一个新学期了,家长会也是在所难免的,小编给大家精心准备了一年级新生家长会主持词,希望对你有所...
大学生迎新晚会主持词开场白和结...   如下内容是小编给大家整理的文学院迎新晚会主持词开场白和结束语,欢迎阅读!  (行者无疆酬壮志 知...
幼儿园新生家长会主持词 幼儿园...  一、开场白:  尊敬的各位家长:  大家上午好!首先非常感谢大家在百忙中抽出时间来参加我们的新生家...
小学新生家长会主持词 小学家长...   尊敬的各位家长:  非常感谢大家来参加这次家长会。今天,对于我们一年级的新同学来说,是个值得纪念...
大学新生典礼主持词范本 大学典...  如下为您提供参考的内容是大学新生典礼主持词范本,欢迎阅读。  学生入场(9:30会议开始)  大家...
最新或2023(历届)初一新生...   初一是一个新的开始,从此你的孩子不在只学语数外,还有着五花八门的东西要学,新生的家长会能让你对自...
新学期初中家长会学生主持稿 幼...   学校每个学期都会召开家长会,家长会上班主任和家长可以“亲密接触”。家长会是家长给老师各项能力直接...
最新或2023(历届)海南省企... 关于最新或2023(历届)海南省企业退休人员基本养老金调整通知  企业退休人员基本养老金月增75元 ...
幼儿园开学新生家长会主持词 班...   快乐的暑假已经过去,收获的秋天来到了,经过一个暑假的休息,相信小朋友们又长高长胖了,到幼儿园也更...
最新或2023(历届)十八届五...   7月20日的政治局会议,决定在10月份召开十八届五中全会。这次会议在经济、政治领域都将面临重要任...
新学期初二学生家长会主持稿 新...   开场白:  甲:尊敬的各位老师  乙:亲爱的叔叔阿姨们  合:大家下午好!  甲:首先,感谢大家...
新学期二年级家长会主持稿 二年...   小编给大家准备了二年级家长会主持稿,欢迎阅读。  女:尊敬的老师  男:亲爱的爸爸妈妈,爷爷奶奶...
最新或2023(历届)江西省企... 5月12日,江西省人社厅正式公布,从今年1月1日起,上调企业退休人员养老金。这是我省自2005年以来...
汉朝时期,太子用棋盘砸死另一个... 汉文帝时期,作为人质居住在帝都长安的吴王太子与汉文帝太子刘启下棋,不料发生争执,蛮横的当朝太子刘启毫...
铁木真难道只是一介&ldquo... 今天我们来说说成吉思汗的聪慧果敢,为什么这么说呢?众所周知,元太祖成吉思汗原名铁木真,也是大蒙古国的...
北宋有九位皇帝,为何出现了五次... 太后和后妃垂帘听政,是我国古代社会专制皇权与后宫制度相结合的产物。在两千余年的中国古代专制社会里,如...
皇帝请大臣吃饭,吃完后派人杀了... 有句老话,叫“伴君如伴虎”,此言非虚,历史上许多有名的将领,就是这样不明不白地丢掉性命的,比如岳飞、...