《Spring Boot 高级》3.3 代理失效的边界
从「this 自调用不经过代理」这一根因出发,解释 @Transactional、@Async、@Cacheable 为何会在同类内部调用时静默失效,梳理 private、final、static 方法的织入失败与 CGLIB 的真实告警文本,并对比 AopContext.currentProxy() 与 ObjectProvider 自注入两种解法的代价。
tag
从「this 自调用不经过代理」这一根因出发,解释 @Transactional、@Async、@Cacheable 为何会在同类内部调用时静默失效,梳理 private、final、static 方法的织入失败与 CGLIB 的真实告警文本,并对比 AopContext.currentProxy() 与 ObjectProvider 自注入两种解法的代价。
讲清 @Aspect 如何经 AnnotationAwareAspectJAutoProxyCreator 与 ReflectiveAspectJAdvisorFactory 变成 Advisor,再看 ReflectiveMethodInvocation 如何串起拦截器链,并核实 @Order、@Priority 与同一切面内各类 advice 的相对顺序。
本节讲面向切面编程在 TypeScript 里的三种实现路径:装饰器、Proxy、编译期转换,给出各自的适用边界与性能代价。随后用装饰器实现环绕通知,落地缓存、事务、重试、日志四类横切关注点;再用一个元数据驱动的校验器说明运行时类型信息的真实用法,并列出各自的坑。
从 AopProxy 接口与 DefaultAopProxyFactory.createAopProxy 的判定分支出发,讲清 Spring 何时用 JDK 动态代理、何时用 CGLIB,proxyTargetClass 与 spring.aop.proxy-target-class 如何改变选择,以及 CGLIB 内联进 spring-core 后两种代理的字节码差异与各自硬限制。
深入 Spring AOP 的代理机制与底层实现,掌握 AspectJ 切点表达式、环绕通知与编译时织入,构建高性能横切面基础设施