网络推广网站培训班哪个网站可以领手工回家做

张小明 2026/1/12 21:26:27
网络推广网站培训班,哪个网站可以领手工回家做,海外站推广,wordpress美金文章目录 1. AOP 是什么#xff1f;为什么要用它#xff1f;1.1 什么是 AOP#xff1f;1.2 一个直观的例子 2. 核心概念速览3. 快速上手#xff1a;Spring AOP 实战3.1 依赖引入3.2 定义切面 4. 核心原理#xff1a;动态代理与字节码增强4.1 JDK 动态代理 (基于接口)4.2 C…文章目录1. AOP 是什么为什么要用它1.1 什么是 AOP1.2 一个直观的例子2. 核心概念速览3. 快速上手Spring AOP 实战3.1 依赖引入3.2 定义切面4. 核心原理动态代理与字节码增强4.1 JDK 动态代理 (基于接口)4.2 CGLIB 动态代理 (基于继承)5. Spring AOP 架构与生命周期流程图架构对比JDK vs CGLIBAOP 代理创建流程图6. AOP 调用流程图责任链模式7. 实战应用指南7.1 自定义注解 AOP (权限校验)7.2 典型应用场景8. 避坑指南与常见问题8.1 同类内部调用失效8.2 private/protected/final 方法8.3 循环依赖9. 总结与延伸1. AOP 是什么为什么要用它1.1 什么是 AOPAOPAspect-Oriented Programming是一种编程范式旨在通过分离横切关注点来提高模块化程度。OOP (面向对象)通过封装、继承将业务逻辑封装成类。AOP (面向切面)将业务逻辑中与核心业务无关但多处重复调用的逻辑如日志、权限、事务抽离出来形成一个“切面”。1.2 一个直观的例子想象一个电商系统业务逻辑创建订单、取消订单、查询订单。横切逻辑每一步操作前都要检查权限每一步操作后都要记录日志。没有 AOP 时publicvoidcreateOrder(){checkPermission();// 重复代码// ... 创建订单逻辑 ...logInfo();// 重复代码}如果 100 个方法都需要权限检查代码就会变得冗余且难以维护。有了 AOP 后业务代码只关注“创建订单”权限和日志像“切面”一样织入到业务代码的周围。2. 核心概念速览在 Spring AOP 中你需要掌握以下术语术语含义类比Join Point (连接点)程序执行的某个特定位置通常是方法执行时。门上的“门缝”Pointcut (切点)匹配连接点的表达式定义了在哪里切入。选定好要钻的那些“门缝”Advice (通知)在切点处执行的动作如方法前、后、异常时。钻进门缝后的动作如挂门帘、贴封条Aspect (切面)切点 通知的组合。一个拿着工具包准备干活的人Target (目标对象)被代理的对象。原始的门Proxy (代理)AOP 框架创建的对象用来包裹目标对象。门框3. 快速上手Spring AOP 实战3.1 依赖引入确保引入了spring-boot-starter-aopdependencygroupIdorg.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency3.2 定义切面这里我们实现一个简单的“性能监控”切面。importorg.aspectj.lang.ProceedingJoinPoint;importorg.aspectj.lang.annotation.*;importorg.springframework.stereotype.Component;Aspect// 1. 标记为切面Component// 2. 交由 Spring 管理publicclassPerformanceAspect{// 3. 定义切点匹配 com.example.service 包下所有类的所有方法Pointcut(execution(* com.example.service.*.*(..)))publicvoidserviceLayer(){}// 4. 环绕通知可以在方法执行前后做处理甚至控制是否执行Around(serviceLayer())publicObjectlogPerformance(ProceedingJoinPointpjp)throwsThrowable{longstartSystem.currentTimeMillis();Objectresultnull;try{// 执行目标方法resultpjp.proceed();returnresult;}finally{longendSystem.currentTimeMillis();System.out.println(pjp.getSignature() took (end-start) ms);}}// 5. 异常通知AfterThrowing(pointcutserviceLayer(),throwingex)publicvoidlogError(Exceptionex){System.err.println(Exception occurred: ex.getMessage());}}4. 核心原理动态代理与字节码增强Spring AOP 的核心机制是代理模式。它不会修改原有类的字节码而是创建一个代理对象来拦截调用。Spring AOP 主要使用两种方式创建代理4.1 JDK 动态代理 (基于接口)条件目标类实现了接口。原理利用反射机制生成一个实现代理接口的匿名类。限制必须基于接口。4.2 CGLIB 动态代理 (基于继承)条件目标类没有实现接口。原理基于 ASM 框架操作字节码生成一个目标类的子类并覆盖其中的方法。限制因为是继承所以无法代理 final 修饰的类或方法。5. Spring AOP 架构与生命周期流程图AOP 并不是在代码编译时就完成的除非使用 AspectJ 编译器而是在 Spring 容器启动时创建 Bean 的过程中发生的。架构对比JDK vs CGLIB方式二: CGLIB 动态代理方式一: JDK 动态代理实现持有委托继承持有委托调用接口调用类客户端Proxy 代理对象InvocationHandlerTarget 目标对象Interface 接口Proxy 子类对象MethodInterceptorTarget 目标对象AOP 代理创建流程图这是 Spring Bean 生命周期中AOP 发生的关键环节。是否/强制CGLIB实例化 Bean属性填充Bean 是否实现了接口?JDK 动态代理CGLIB 动态代理获取所有适用的 Advisor生成代理对象 Proxy将 Proxy 放入 Spring 容器6. AOP 调用流程图责任链模式当你在代码中调用被代理的 Bean 方法时实际执行的流程如下。这是一个典型的拦截器链模式。TargetAdvice2Advice1AopChainTarget (目标对象)Advice2 (事务切面)Advice1 (日志切面)AopChain(拦截器链)ProxyClientTargetAdvice2Advice1AopChainTarget (目标对象)Advice2 (事务切面)Advice1 (日志切面)AopChain(拦截器链)ProxyClient按顺序执行环绕通知执行前置通知 Before执行后置/返回通知 After/AfterReturninguserService.saveUser()构建调用链Around BeforeReturnAround BeforeReturn执行目标方法Return ResultAround AfterReturnAround AfterReturnFinal ResultReturn Result7. 实战应用指南7.1 自定义注解 AOP (权限校验)这是开发中最常用的模式通过自定义注解标记方法配合 AOP 进行逻辑处理。1. 定义注解Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceRequirePermission{Stringvalue();}2. 定义切面AspectComponentpublicclassSecurityAspect{Before(annotation(requirePermission))// 匹配带注解的方法publicvoidcheckPermission(JoinPointjp,RequirePermissionrequirePermission){StringneededPermrequirePermission.value();// 获取当前用户权限StringcurrentUserPermgetCurrentUserPerm();if(!neededPerm.equals(currentUserPerm)){thrownewAccessDeniedException(Permission Denied!);}}}3. 使用ServicepublicclassOrderService{RequirePermission(admin:delete)publicvoiddeleteOrder(Longid){// 业务逻辑}}7.2 典型应用场景日志记录记录方法入参、出参、执行耗时。声明式事务Transactional是 Spring AOP 最经典的应用。异常处理统一捕获 DAO 层或 Service 层的异常转换为业务异常。缓存在方法执行前查缓存执行后更新缓存。限流/降级在方法入口处判断是否超过阈值。8. 避坑指南与常见问题8.1 同类内部调用失效现象在同一个类中A 方法调用了 B 方法B 方法有切面发现切面不生效。原因Spring AOP 基于代理。外部调用this.A()时this指向的是代理对象代理对象会处理切面但如果在 A 方法内部直接调用B()这时的this是目标对象本身而非代理对象因此绕过了 AOP。解决注入自身Autowired private SelfService self;。使用AopContext.currentProxy()。8.2 private/protected/final 方法现象切面不生效。原因JDK 动态代理只能代理接口方法。CGLIB通过继承子类实现无法重写private或final方法。解决切面方法修饰符改为public或protected默认为 public不要使用 final。8.3 循环依赖现象Bean A 依赖 Bean BBean B 的切面又依赖 Bean A。原因AOP 创建代理对象是一个“半成品”在初始化阶段可能会因为循环引用导致 Bean 创建失败。解决Spring 3.0 已经处理了部分场景但最佳实践是重构代码结构避免循环依赖或使用Lazy注解。9. 总结与延伸维度内容核心思想横切关注点分离提升模块化技术选型Spring AOP简单、集成好 vs AspectJ功能全、需编译期织入适用场景日志、安全、事务、缓存、监控、重试等底层机制动态代理JDK / CGLIB学习路径概念 → 切面编写 → 表达式 → 原理 → 高级应用注意AOP 是利器但不是银弹。过度使用会导致逻辑隐晦、调试困难。只在真正需要解耦横切逻辑时使用它。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

梦幻西游网页版官方网站文字设计成图形logo

在当今的游戏开发领域,碰撞系统优化已成为决定射击游戏成败的关键因素。WinPython项目作为一个功能强大的Python发行版,为游戏开发者提供了完善的工具链来实现精准的碰撞检测。本文将深入探讨如何通过系统化的优化策略,提升射击游戏的整体体验…

张小明 2025/12/30 12:22:13 网站建设

网站 错位wordpress侧缩略图

Simple Live直播聚合工具:我的跨平台观看体验分享 【免费下载链接】dart_simple_live 简简单单的看直播 项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live 作为一个重度直播爱好者,我一直在寻找能够整合各大直播平台的工具&am…

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

推广运营公司网站免费网站模板 怎么用

STM32驱动ST7789显示屏:告别卡顿,轻松实现流畅显示的实战指南 【免费下载链接】ST7789-STM32 using STM32s Hardware SPI to drive a ST7789 based IPS displayer 项目地址: https://gitcode.com/gh_mirrors/st/ST7789-STM32 还在为STM32驱动液晶…

张小明 2026/1/3 16:44:51 网站建设

临西做网站报价游戏攻略网站怎么做

IDM激活脚本是一个强大的开源工具,能够帮助用户永久免费使用Internet Download Manager的全部功能。通过先进的注册表锁定技术,这个脚本可以让IDM的30天试用期永远有效,无需重复激活操作。对于经常需要下载文件的用户来说,这无疑是…

张小明 2025/12/31 21:31:31 网站建设

基础微网站开发代理广州vps网站

掌握Vite-Vue3低代码平台:从入门到精通的完整指南 【免费下载链接】vite-vue3-lowcode vue3.x vite2.x vant element-plus H5移动端低代码平台 lowcode 可视化拖拽 可视化编辑器 visual editor 类似易企秀的H5制作、建站工具、可视化搭建工具 项目地址: https:…

张小明 2025/12/31 22:25:36 网站建设

给钱做任务的网站住建部官方网站

专网自实现域名系统的深度可行性研究与实施规划报告 执行摘要 随着企业数字化转型的纵深发展,网络基础设施的自主可控性已从单纯的合规要求转变为核心竞争力的关键组成部分。在封闭或混合云架构的专网环境中,域名系统(DNS)不再仅…

张小明 2026/1/9 4:17:34 网站建设