优化AopProxy

master
linlei 2024-04-11 13:59:43 +08:00
parent da583360d8
commit 1140258bd1
1 changed files with 20 additions and 41 deletions

View File

@ -1,38 +1,26 @@
## AopProxy
- [AopProxy](#AopProxy)
- [一、基本信息](#一基本信息)
- [二、知识储备](#二知识储备)
- [三、基本描述](#三基本描述)
- [四、主要功能](#四主要功能)
- [五、接口源码](#五接口源码)
- [六、主要实现](#六主要实现)
- [七、最佳实践](#七最佳实践)
- [八、与其他组件的关系](#八与其他组件的关系)
- [九、常见问题](#九常见问题)
- [AopProxy](#aopproxy)
- [一、基本信息](#一基本信息)
- [二、基本描述](#二基本描述)
- [三、主要功能](#三主要功能)
- [四、接口源码](#四接口源码)
- [五、主要实现](#五主要实现)
- [六、最佳实践](#六最佳实践)
- [JDK动态代理](#jdk动态代理)
- [CGLIB代理](#cglib代理)
- [七、源码分析](#七源码分析)
- [七、常见问题](#七常见问题)
### 一、基本信息
✒️ **作者** - Lex 📝 **博客** - [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备
1. **代理模式**
+ 了解代理模式的概念包括静态代理和动态代理。Spring AOP就是通过代理模式来实现切面功能的。
2. **JDK动态代理和CGLIB**
+ 了解JDK动态代理和CGLIB代理的区别以及Spring AOP是如何选择代理方式的。`AopProxy` 接口的实现通常涉及这两种代理方式。
3. **Spring AOP的实现原理**
+ 深入了解Spring AOP的实现原理包括如何创建代理、如何应用通知等。`AopProxy` 接口在Spring AOP中扮演着重要的角色它负责创建代理对象。
### 三、基本描述
### 二、基本描述
`AopProxy` 接口是Spring框架中用于支持面向切面编程AOP的关键组件之一它定义了生成代理对象的标准接口允许在运行时动态地创建代理对象以实现对目标对象的方法调用进行拦截和增强。
### 、主要功能
### 三、主要功能
1. **代理对象的创建与管理**
@ -50,7 +38,7 @@
+ 通过 `AopProxy` 接口可以将AOP的横切关注点与业务逻辑进行分离提高了代码的模块化和可维护性同时也使得横切关注点可以被重用在多个不同的业务逻辑中。
### 、接口源码
### 、接口源码
`AopProxy` 接口是一个委托接口用于配置AOP代理并允许创建实际的代理对象。它提供了两个方法用于创建代理对象第一个方法使用默认的类加载器创建代理对象通常是线程上下文类加载器第二个方法允许指定类加载器创建代理对象。可以使用JDK动态代理或者CGLIB代理技术来生成代理对象。
@ -90,17 +78,16 @@ public interface AopProxy {
}
```
### 、主要实现
### 、主要实现
1. **JdkDynamicAopProxy**
+ 使用 JDK 动态代理实现的 `AopProxy` 实现类。当目标对象实现了至少一个接口时Spring 将使用该类创建代理对象。该类通过 Java 标准库中的 `java.lang.reflect.Proxy` 类来创建代理对象。
2. **CglibAopProxy**
+ 使用 CGLIBCode Generation Library动态代理实现的 `AopProxy` 实现类。当目标对象没有实现任何接口时Spring 将使用该类创建代理对象。该类通过生成目标类的子类来创建代理对象,实现了对目标对象方法的拦截和增强。
### 、最佳实践
### 、最佳实践
#### JDK动态代理
@ -204,19 +191,11 @@ Cglib Class = class com.xcs.spring.MyServiceImpl$$EnhancerBySpringCGLIB$$3c23100
doSomething method result = hello world
```
### 八、与其他组件的关系
### 七、源码分析
1. **AdvisedSupport**
暂无
+ `AopProxy` 接口的实现类需要依赖 `AdvisedSupport` 对象来获取配置信息,包括目标对象、通知、切点等。通过 `AdvisedSupport` 对象,`AopProxy` 实现类可以知道如何创建代理对象。
2. **java.lang.reflect.Proxy**
+ `java.lang.reflect.Proxy` 类是 Java 标准库中的一个类,用于创建基于接口的动态代理对象。它提供了静态方法 `newProxyInstance`,可以根据指定的类加载器、接口列表和调用处理器来创建代理对象。
3. **org.springframework.cglib.proxy.Enhancer**
+ `org.springframework.cglib.proxy.Enhancer` 类是 CGLIB 库中的一个类,用于创建基于类的动态代理对象。它能够生成目标类的子类,并重写其中的方法以实现方法拦截和增强。
### 九、常见问题
### 七、常见问题
1. **选择合适的代理方式**