百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide

2025/1/14 6:03:21

本文主要是介绍百万架构师第十六课:源码分析: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"/>

使用的时候要调代理对象,但是判断的时候要调原生对象。

来源于: https://javaguide.net

微信公众号:不止极客



这篇关于百万架构师第十六课:源码分析:Spring 源码分析:手写SpringAOP核心原理|JavaGuide的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程