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

张小明 2026/1/2 11:15: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进行投诉反馈,一经查实,立即删除!

网站规划中的三种常用类型qq官方网站

作者:资深IT分析师引言:软件工程的“冰山之下”在很多技术人员和CTO 的眼中,低代码(Low-Code)依然是一个充满争议的词汇。“它是给不懂技术的业务人员用的玩具。”“它生成的代码不可控,不仅锁死厂商&#…

张小明 2025/12/31 15:46:37 网站建设

wordpress网站主修改密码网页设计模板html代码百度云

导语:inclusionAI正式开源高性能思维模型Ring-flash-2.0,基于MoE架构实现100B总参数与6.1B激活参数的高效配置,通过创新icepop算法突破MoE模型RL训练不稳定性难题,在数学竞赛、代码生成等复杂推理任务上全面超越40B级稠密模型性能…

张小明 2026/1/1 17:45:41 网站建设

佛山网站设计中心东莞营销型网站建设

大三党毕业设计救星:10G大文件上传加密断点续传(原生JSSpringBoot) 兄弟,作为山西某高校计科专业的大三老狗,我太懂你现在的处境了——毕业设计要做文件管理系统,甲方(老师)要10G大…

张小明 2026/1/2 6:53:25 网站建设

营销型网站建设推来客网络织梦和wordpress哪个安全

GPT-SoVITS与区块链结合:去中心化语音模型市场 在数字内容创作日益繁荣的今天,一个配音演员的声音可能被用于全球有声书、虚拟主播甚至AI客服系统。但问题也随之而来:谁拥有这个声音?如何防止它被未经授权地复制使用?创…

张小明 2026/1/1 22:09:49 网站建设

天津建设执业资格注册中心网站东莞建站方案

第一章:为什么顶尖团队都在悄悄使用Open-AutoGLM?在人工智能研发竞争日益激烈的今天,顶尖技术团队正悄然转向一个高效、灵活且可扩展的自动化大模型工具——Open-AutoGLM。它不仅大幅缩短了从实验到部署的周期,还通过智能提示工程…

张小明 2026/1/1 21:39:08 网站建设

上海人才网最新招聘信息官方网站织梦网站如何做404

3分钟玩转键盘可视化:KeyCastr让你的操作不再神秘 【免费下载链接】keycastr KeyCastr, an open-source keystroke visualizer 项目地址: https://gitcode.com/gh_mirrors/ke/keycastr 还在为录屏时观众看不懂你的快捷键而烦恼吗?做技术分享时&am…

张小明 2026/1/2 6:26:44 网站建设