网站开发ppt方案模板台州企业网站排名优化

张小明 2025/12/31 13:00:54
网站开发ppt方案模板,台州企业网站排名优化,平面设计图数字标识,深圳做英文网站的公司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进行投诉反馈,一经查实,立即删除!

教程推广优化网站排名网站做语音识别

StardewXnbHack终极指南:3步解锁《星露谷物语》全部游戏资源 【免费下载链接】StardewXnbHack A simple one-way XNB unpacker for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/st/StardewXnbHack 你是否想要自定义《星露谷物语》的角色外观、…

张小明 2025/12/27 12:30:11 网站建设

宁波企业网站优化推广wordpress附件存放位置

TL;DR 场景:用 Java(amqp-client)跑通 Hello World,并把生产者/消费者从建连到 ACK 的链路写清楚结论:默认交换器 “” 会把“路由键队列名”的消息直接投到队列;mandatory 可回退,immediate 在…

张小明 2025/12/27 13:19:16 网站建设

网站 空间wordpress怎么绑域名

一、项目介绍 本文介绍了一个基于YOLOv12目标检测算法的疲劳驾驶监测系统。该系统旨在通过实时分析驾驶员面部图像,自动识别其疲劳状态,分为“清醒”和“疲劳”两类,从而为驾驶安全提供有效的技术保障。YOLOv12作为最新的高性能检测模型&…

张小明 2025/12/30 23:01:50 网站建设

做网站分层技术常州网站制作公司排名

在AI视频生成领域,阿里云推出的Wan2.2开源模型正掀起一场技术革命。这款基于Apache 2.0协议的视频生成框架,不仅实现了商业使用的广泛开放,更在视觉质量、运动控制、计算效率等维度实现了突破性进展。无论你是内容创作者、技术开发者还是AI研…

张小明 2025/12/26 20:14:55 网站建设

网站上的图用美图秀秀做可以吗贴心的合肥网站建设

你是否曾经希望只需用自然语言就能让电脑自动完成各种重复性任务?现在,AI桌面自动化不再是梦想!UI-TARS桌面版作为一款革命性的GUI操作工具,通过先进的视觉语言模型技术,让你能够用简单的对话指令控制整个桌面环境。无…

张小明 2025/12/27 14:27:58 网站建设

网站建设火凤凰公司展厅设计制作

Linux 设备驱动与网络设备全解析 1. 网络设备概述 网络设备与普通设备不同,它不通过设备节点访问,也没有主次设备号。内核会根据字符串和实例编号为网络设备分配名称。例如,网络驱动注册接口的代码如下: my_netdev = alloc_netdev(0, "net%d", NET_NAME_UNKN…

张小明 2025/12/26 23:40:30 网站建设