上海建设小学网站去长沙旅游攻略

张小明 2026/1/9 5:05:49
上海建设小学网站,去长沙旅游攻略,广州网站建设小程序,企业微信app下载安装不了AOP#xff08;面向切面编程#xff09;是 Spring 核心特性之一#xff0c;Spring Boot 对 AOP 做了轻量化封装#xff0c;无需复杂配置即可快速实现日志记录、性能监控、权限校验、事务管理等横切逻辑#xff0c;大幅提升代码复用性和可维护性。一、核心概念#xff08;…AOP面向切面编程是 Spring 核心特性之一Spring Boot 对 AOP 做了轻量化封装无需复杂配置即可快速实现日志记录、性能监控、权限校验、事务管理等横切逻辑大幅提升代码复用性和可维护性。一、核心概念快速理解概念说明切面Aspect封装横切逻辑的类如日志切面、权限切面是 AOP 的核心载体连接点JoinPoint程序执行过程中的任意节点如方法调用、异常抛出Spring 仅支持方法级连接点切入点Pointcut匹配需要增强的连接点如指定包下的所有方法通过表达式精准筛选通知Advice切面的具体增强逻辑分为 5 种类型✅ 前置通知Before方法执行前执行✅ 后置通知After方法执行后执行无论是否异常✅ 返回通知AfterReturning方法正常返回后执行✅ 异常通知AfterThrowing方法抛出异常后执行✅ 环绕通知Around包裹方法执行可自定义执行时机织入Weaving将切面逻辑融入目标方法的过程Spring Boot 中默认是运行时织入二、快速上手Spring Boot 集成 AOP1. 引入依赖xml!-- Spring Boot AOP 核心依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-aop/artifactId /dependency2. 编写切面类实战日志记录java运行import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; // 1. 标记为切面类 交给 Spring 管理 Aspect Component public class LogAspect { private static final Logger log LoggerFactory.getLogger(LogAspect.class); // 2. 定义切入点匹配 com.example.demo.service 包下所有类的所有方法 Pointcut(execution(* com.example.demo.service.*.*(..))) public void servicePointcut() {} // 3. 前置通知记录方法调用信息 Before(servicePointcut()) public void beforeMethod(JoinPoint joinPoint) { String className joinPoint.getTarget().getClass().getName(); String methodName joinPoint.getSignature().getName(); Object[] args joinPoint.getArgs(); log.info(【前置通知】调用方法{}.{}参数{}, className, methodName, args); } // 4. 环绕通知监控方法执行耗时 Around(servicePointcut()) public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable { long startTime System.currentTimeMillis(); // 执行目标方法 Object result joinPoint.proceed(); long costTime System.currentTimeMillis() - startTime; log.info(【环绕通知】方法 {} 执行耗时{}ms, joinPoint.getSignature().getName(), costTime); return result; } // 5. 返回通知记录方法返回值 AfterReturning(value servicePointcut(), returning result) public void afterReturningMethod(JoinPoint joinPoint, Object result) { log.info(【返回通知】方法 {} 返回结果{}, joinPoint.getSignature().getName(), result); } // 6. 异常通知记录方法异常信息 AfterThrowing(value servicePointcut(), throwing e) public void afterThrowingMethod(JoinPoint joinPoint, Exception e) { log.error(【异常通知】方法 {} 抛出异常{}, joinPoint.getSignature().getName(), e.getMessage(), e); } }3. 测试目标方法java运行import org.springframework.stereotype.Service; Service public class UserService { public String getUserInfo(Long id) { // 模拟业务逻辑 if (id 0) { throw new IllegalArgumentException(用户ID不能为负数); } return 用户ID id 姓名张三; } }4. 运行效果调用getUserInfo(1L)会输出plaintext【前置通知】调用方法com.example.demo.service.UserService.getUserInfo参数[1] 【环绕通知】方法 getUserInfo 执行耗时2ms 【返回通知】方法 getUserInfo 返回结果用户ID1姓名张三调用getUserInfo(-1L)会输出plaintext【前置通知】调用方法com.example.demo.service.UserService.getUserInfo参数[-1] 【异常通知】方法 getUserInfo 抛出异常用户ID不能为负数三、进阶用法1. 切入点表达式常用表达式类型示例说明按方法签名匹配execution(* com.example.service.*.*(..))匹配 service 包下所有类的所有方法按注解匹配annotation(com.example.annotation.Log)匹配标注了 Log 注解的方法按包匹配within(com.example.service..*)匹配 service 包及子包下的所有类2. 自定义注解 AOP更灵活java运行// 自定义注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface Log { String desc() default ; // 日志描述 } // 切面匹配注解 Pointcut(annotation(com.example.demo.annotation.Log)) public void annotationPointcut() {} // 使用注解 Service public class OrderService { Log(desc 创建订单) public String createOrder(String orderNo) { return 订单创建成功 orderNo; } }四、注意事项代理机制Spring AOP 默认使用 JDK 动态代理针对接口无接口时自动切换为 CGLIB 代理可通过EnableAspectJAutoProxy(proxyTargetClass true)强制使用 CGLIB。内部方法调用目标类内部调用自身方法如A.method1()调用A.method2()method2的切面不会生效代理对象未被触发可通过注入自身 Bean 解决。性能影响AOP 基于动态代理实现少量切面对性能影响可忽略大量复杂环绕通知需注意优化逻辑。优先级多个切面可通过Order(n)指定执行顺序n 越小优先级越高。五、典型应用场景日志审计记录接口调用的请求参数、响应结果、操作人、操作时间。性能监控统计接口响应时间识别慢接口。权限控制校验用户是否有接口访问权限。事务管理通过Transactional底层基于 AOP控制事务边界。缓存控制缓存方法返回结果减少重复计算。参数校验统一校验接口入参的合法性。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站视频下载最好的网站统计

告别命令行恐惧:元数据可视化编辑器让照片管理回归简单 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾经面对几百张照片,想要统一添加版权信息却被复杂的命令行参数劝退&am…

张小明 2026/1/5 4:04:54 网站建设

织梦网站被植入广告seo是什么化学名称

在Java后端开发中,图书借阅管理系统是经典的CRUD统计分析实战场景,而MyBatis作为半ORM框架,凭借其灵活的SQL控制能力,成为实现该系统的理想选择。本文基于真实的数据库表结构,针对10道核心业务题目,完整解析…

张小明 2026/1/8 12:30:32 网站建设

东莞做网站首选网站设计大概价格

概述 CALIBRE-WEB是一个基于Web的电子书管理应用,它提供了一个简洁的界面用于浏览、阅读和下载电子书,支持使用现有的Calibre数据库。该应用由LinuxServer.io团队提供容器化支持,具备以下特点: 定期及时的应用更新简单的用户权限…

张小明 2026/1/6 19:16:16 网站建设

支付网站模板乐清新闻综合频道直播

PaddlePaddle模型导出与部署:支持多硬件加速的全流程实践 在工业质检、智能巡检、金融票据识别等实际场景中,一个训练好的深度学习模型能否快速、稳定地运行在不同设备上,往往直接决定了项目的成败。开发者不再满足于“能跑通”,而…

张小明 2026/1/6 13:25:26 网站建设

河南网站建设优化推广做pc端网站方案

为帮助考生了解专业情况,提前做好专业选择与职业生涯规划,省教育考试院联合省教育厅高教处、相关高校推出“专业解读”系列,供2022年高考生参考。 今天,将为考生送上第五期——网络空间安全专业解读。“没有网络安全,…

张小明 2026/1/7 20:02:54 网站建设

佛山企业网站制作哪家好潜山网站建设

谷城县这家家电门店,竟藏着最全产品,你去过吗?在谷城县,家电市场的选择众多,但有一家门店却脱颖而出,它就是谷城县海尔专卖店(县府街店),这里仿佛藏着家电界的“百宝箱”…

张小明 2026/1/5 1:58:30 网站建设