百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide
已完成
- Spring IOC
- Spring DI
- Spring MVC
继续完善:
Spring AOP 的功能,基于 Spring IOC 和 DI 去完成
未完成: Spring AOP、Spring Transaction、Spring JDBC、自己手写 ORM 框架。
Spring IOC 入口,DispatcherServlet,通过 DispatcherServlet 启动一个 ApplicationContext 容器,由 ApplicationContext 启动一个 IOC 的操作,通过 DarianBeanDefinitionReader 读进来,变成一个 DarianBeanDefinition,有一个 DI 过程,有一个依赖注入,完成之后,会把所有的对象封装成 BeanWrapper,再把 BeanWrapper 保存在容器中。DI 是从一个 getBean 开始的。 IOC 是从 refresh() 开始的。
所有的对象在 IOC 中都有一个代理的过程,在 Spring 中真实的对象,我们基本上是拿不到的。我们会有一个 AOP 的过程,我们代理的过程主要是由一个掌控力,代理之后,对象都是由 Spring 去掌控了,而不是最原始的对象了。我们 Spring 只是为了帮你保存下来最原始的对象,不会做任何更改,我们 Spring 操作的都是被代理过的对象。
BeanWrapper中,我们保存了最原始的对象和代理后的对象。
Spring 会根据你一个目标接口,也就是目标的一个类,有没有实现接口。Java 中不能支持多实现的。如果你实现了接口,他就会选择 JDK, 如果没有实现,他就会选择 Cglib。它是有策略的。
<aop:pointcut expression="execution(* com.gupaoedu.vip.aop.service..*(..))" id="simplePointcut"/>
使用的时候要调代理对象,但是判断的时候要调原生对象。
微信公众号:不止极客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人