AOP代理
JDK代理和CGLIB代理
- jdk动态代理,是jvm自身实现的一个代理,最核心的点在于是一种基于接口的代理,所以如果没有实现接口的话……
- cglib代理,核心原理是修改字节码,通过继承来实现代理对象,也就是说如果没法继承(如final修饰符),那么……
@EnableAspectJAutoProxy开启AOP
参数:
proxyTargetClass
默认false
,使用哪种代理方式true
- 目标对象实现了接口 –> 使用CGLIB代理机制
- 目标对象没有接口(只有实现类) – 使用CGLIB代理机制
false
- 目标对象实现了接口 –> 使用JDK动态代理机制(代理所有实现了的接口)
- 目标对象没有接口(只有实现类) – 使用CGLIB代理机制
exposeProxy
默认false
,是否在ThreadLocal
中暴露代理对象true
false
:不处理(不代理)- 可以通过AopContext.currentProxy()获得这个代理对象的一个副本(ThreadLocal里面),从而我们可以很方便得在Spring框架上下文中拿到当前代理对象,然后用代理对象调用类内部的其他方法,或者注入自身类的代理
@Autowired
private MyClass _this;
常见代理失效
- 类内部方法间调用,a方法调用b方法,b方法无法触发代理.可以用AopContext.currentProxy()获取代理对象,然后调用b方法,或者注入自己类,然后用注入的类调用b方法
- static ,final,private 等修饰,虽然aspectj可以代理private,但不建议这么做
- 未被spring管理
- AopContxt.currentProxy()方法不能放到子线程中进行获取,因为AopContext.currentProxy()使用的是LocalThread存储当前代理,在新的线程中,LocalThread为空,所以就拿不到代理
你要是觉得写的还不错,就点个关注,可以评论区留下足迹,以后方便查看.
你要是觉得写的很辣鸡,评论区欢迎来对线!
欢迎转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)