邯郸建站公司网站制作教程dw

张小明 2026/1/11 15:02:24
邯郸建站公司,网站制作教程dw,在网站挂广告一个月多少钱,asp.net mvc网站发布教程一、先搞懂#xff1a;为什么需要 AOP#xff1f;#xff08;解决什么痛点#xff09;先看一个典型问题#xff1a;假如你有 3 个业务方法#xff08;用户注册、订单创建、支付#xff09;#xff0c;每个方法都需要加「日志记录」「权限校验」「异常处理」逻辑#x…一、先搞懂为什么需要 AOP解决什么痛点先看一个典型问题假如你有 3 个业务方法用户注册、订单创建、支付每个方法都需要加「日志记录」「权限校验」「异常处理」逻辑传统写法会这样java运行// 传统写法通用逻辑和业务逻辑耦合 public void registerUser() { // 1. 日志记录通用逻辑 log.info(开始执行用户注册); // 2. 权限校验通用逻辑 if (!hasPermission()) { throw new NoPermissionException(); } try { // 3. 核心业务逻辑 userService.save(); } catch (Exception e) { // 4. 异常处理通用逻辑 log.error(注册失败, e); throw e; } } public void createOrder() { // 重复的日志、权限、异常逻辑... orderService.save(); }痛点通用逻辑日志、权限重复写代码冗余维护成本高比如要改日志格式得改所有方法。AOP 的解决思路把日志、权限这些通用逻辑抽成「切面」在不修改业务代码的前提下自动 “织入” 到业务方法的执行环节比如执行前、执行后、抛出异常时。二、AOP 核心概念新手必记用 “切蛋糕” 类比业务逻辑是蛋糕的主体AOP 是 “刀”按指定规则切点切到蛋糕的指定位置连接点把切面逻辑奶油 / 水果加进去。概念通俗解释切面Aspect抽离出来的通用逻辑模块比如日志切面、权限切面包含「切点」「通知」连接点Join Point程序执行过程中的 “时机点”比如方法执行前、执行后、抛出异常时切点Pointcut筛选连接点的 “规则”比如只匹配 service 包下的所有方法通知Advice切面在连接点执行的具体逻辑比如前置通知方法执行前打日志织入Weaving把切面逻辑植入到业务代码的过程AOP 框架自动完成分编译期、类加载期、运行期常见的通知类型核心前置通知Before业务方法执行前执行比如权限校验后置通知After业务方法执行后执行无论是否异常比如清理资源返回通知AfterReturning业务方法正常返回后执行比如记录方法返回值异常通知AfterThrowing业务方法抛出异常后执行比如异常日志环绕通知Around包裹业务方法执行可控制方法是否执行、修改参数 / 返回值最灵活。三、AOP 实现原理两种核心方式AOP 本身是思想主流实现有两种1. 静态代理编译期织入原理通过修改字节码实现比如 AspectJ编译时直接把切面逻辑编译到业务类的字节码中特点性能高运行时无额外开销但需要特殊编译器适用对性能要求极高的场景。2. 动态代理运行期织入原理运行时动态生成业务类的代理对象调用业务方法时先执行切面逻辑Spring AOP 默认方式两种实现JDK 动态代理基于接口只能代理实现了接口的类CGLIB 动态代理基于继承可代理任意类即使没实现接口特点无需修改字节码灵活但运行时有轻微性能损耗可忽略适用大部分业务场景Spring AOP 首选。四、Spring AOP 实战示例新手能跑通Spring AOP 是最常用的 AOP 框架下面用「日志切面」演示核心用法前置条件引入 Spring AOP 依赖Mavenxmldependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-aop/artifactId /dependency步骤 1定义切面类核心java运行import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Component; // 1. 标记为组件Spring扫描 标记为切面 Component Aspect public class LogAspect { // 2. 定义切点匹配com.example.service包下所有类的所有方法 Pointcut(execution(* com.example.service.*.*(..))) public void servicePointcut() {} // 3. 前置通知方法执行前打日志 Before(servicePointcut()) public void beforeAdvice(JoinPoint joinPoint) { String methodName joinPoint.getSignature().getName(); // 获取方法名 Object[] args joinPoint.getArgs(); // 获取方法参数 System.out.println(前置通知执行方法[ methodName ]参数 args); } // 4. 环绕通知统计方法执行耗时 Around(servicePointcut()) public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { long start System.currentTimeMillis(); // 执行原业务方法 Object result joinPoint.proceed(); long cost System.currentTimeMillis() - start; System.out.println(环绕通知方法[ joinPoint.getSignature().getName() ]耗时 cost ms); return result; } // 5. 异常通知方法抛异常时打日志 AfterThrowing(pointcut servicePointcut(), throwing e) public void afterThrowingAdvice(JoinPoint joinPoint, Exception e) { String methodName joinPoint.getSignature().getName(); System.out.println(异常通知方法[ methodName ]抛出异常 e.getMessage()); } }步骤 2定义业务类java运行import org.springframework.stereotype.Service; Service public class UserService { public void register(String username) { System.out.println(核心业务用户[ username ]注册成功); // 模拟异常可注释测试 // if (username.isEmpty()) { // throw new RuntimeException(用户名不能为空); // } } }步骤 3测试执行java运行import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; SpringBootApplication public class AopDemoApplication { public static void main(String[] args) { ConfigurableApplicationContext context SpringApplication.run(AopDemoApplication.class, args); UserService userService context.getBean(UserService.class); userService.register(张三); // 调用业务方法 } }输出结果plaintext前置通知执行方法[register]参数[张三] 核心业务用户[张三]注册成功 环绕通知方法[register]耗时1ms五、AOP 典型使用场景日志记录接口调用日志、方法执行日志、异常日志最常用权限校验接口访问前校验用户权限无权限则拦截事务管理方法执行前开启事务执行成功提交失败回滚Spring 事务底层就是 AOP性能监控统计方法执行耗时、接口响应时间缓存控制方法执行前查缓存有则返回无则执行方法并缓存结果异常统一处理集中捕获业务异常统一返回格式。总结AOP 的核心是解耦把通用逻辑日志、权限从业务逻辑中抽离实现 “一处定义处处使用”Spring AOP 是主流实现基于动态代理通过「切面 切点 通知」完成逻辑织入高频场景日志、权限、事务、性能监控是企业级开发的必备技能。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

为解析的域名做网站公司网站优化方案

LobeChat 与企业私有化部署:为何它正成为 AI 交互层的首选? 在企业智能化转型浪潮中,一个看似简单却极为关键的问题日益凸显:如何让大模型真正“可用”于普通员工? 很多公司已经部署了本地大模型、搭建了知识库系统、接…

张小明 2026/1/6 15:37:11 网站建设

镇海区建设交通局网站建设工程师交易网站

第一章:多模态 Agent 的 Docker 存储配置在构建支持多模态数据(如文本、图像、音频)处理的 Agent 系统时,Docker 容器化部署中的存储配置至关重要。合理的存储策略不仅能保障数据持久化,还能提升 I/O 性能与跨容器共享…

张小明 2026/1/6 1:38:55 网站建设

设计接单兼职网站网站被k文章修改

Navicat16 Mac版终极重置指南:免费无限试用完整教程 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navicat16 Mac版试用期到期而烦恼吗?这款专业…

张小明 2026/1/9 3:31:48 网站建设

南京微信网站建设温州网站建设哪家好

导语 【免费下载链接】Dolphin-Mistral-24B-Venice-Edition 项目地址: https://ai.gitcode.com/hf_mirrors/dphn/Dolphin-Mistral-24B-Venice-Edition 当企业AI应用因第三方模型突然调整系统提示而崩溃,当敏感数据因调用云端API面临泄露风险,当通…

张小明 2026/1/6 15:37:12 网站建设

做设备租赁的网站qq公众平台

一、Linux特性&#xff1a;多用户&#xff0c;多任务同一时间&#xff0c;多个用户在同一系统执行不同任务互不影响二、Linux用户分类超级管理员root&#xff0c;UID0系统用户&#xff0c;无法登陆系统&#xff0c;主要作用是支撑系统运行&#xff0c;UID<1000普通用户&…

张小明 2026/1/7 14:07:04 网站建设