diff --git a/README.md b/README.md
index edd985d..46a4f05 100644
--- a/README.md
+++ b/README.md
@@ -198,20 +198,21 @@
+ Spring AOP
- [JDK动态代理](spring-aop/spring-aop-jdkProxy/README.md):接口实现,动态生成代理类,处理方法调用,统一横切关注点。
- [Cglib动态代理](spring-aop/spring-aop-cglibProxy/README.md):基于字节码生成的库,无需接口,可拦截类方法并进行增强。
- - [AopProxy](spring-aop/spring-aop-aopProxy/README.md):创建和管理AOP代理对象。
- - [AopProxyFactory](spring-aop/spring-aop-aopProxyFactory/README.md):创建AOP代理工厂,支持JDK和CGLIB。
- - [ProxyFactory](spring-aop/spring-aop-proxyFactory/README.md):一种便捷的方式来创建代理对象。
- [ClassFilter](spring-aop/spring-aop-classFilter/README.md):确定类是否匹配拦截条件。
- [MethodMatcher](spring-aop/spring-aop-methodMatcher/README.md):确定方法是否匹配拦截条件。
- [Pointcut](spring-aop/spring-aop-pointcut/README.md):定义切入点,匹配被拦截的方法。
- - [MethodInterceptor](spring-aop/spring-aop-advice-methodInterceptor/README.md):拦截方法执行,允许在前后添加额外逻辑。
- - [MethodBeforeAdvice](spring-aop/spring-aop-advice-methodBeforeAdvice/README.md):允许在方法调用之前插入自定义逻辑。
- - [AfterReturningAdvice](spring-aop/spring-aop-advice-afterReturningAdvice/README.md):允许在方法调用之后插入自定义逻辑。
- - [ThrowsAdvice](spring-aop/spring-aop-advice-throwsAdvice/README.md):异常通知,捕获方法抛出的异常,执行额外逻辑。
- - [IntroductionInterceptor](spring-aop/spring-aop-advice-introductionInterceptor/README.md):动态地向目标对象引入新的功能或属性。
+ - [Advice]():AOP中定义各种通知类型行为的核心接口。
+ - [MethodInterceptor](spring-aop/spring-aop-advice-methodInterceptor/README.md):拦截方法执行,允许在前后添加额外逻辑。
+ - [MethodBeforeAdvice](spring-aop/spring-aop-advice-methodBeforeAdvice/README.md):允许在方法调用之前插入自定义逻辑。
+ - [AfterReturningAdvice](spring-aop/spring-aop-advice-afterReturningAdvice/README.md):允许在方法调用之后插入自定义逻辑。
+ - [ThrowsAdvice](spring-aop/spring-aop-advice-throwsAdvice/README.md):异常通知,捕获方法抛出的异常,执行额外逻辑。
+ - [IntroductionInterceptor](spring-aop/spring-aop-advice-introductionInterceptor/README.md):动态地向目标对象引入新的功能或属性。
+ - [Advised](spring-aop/spring-aop-advised/README.md):配置AOP代理的通知、通知器、目标等。
+ - [ProxyFactory](spring-aop/spring-aop-proxyFactory/README.md):一种便捷的方式来创建代理对象。
+ - [AopProxy](spring-aop/spring-aop-aopProxy/README.md):创建和管理AOP代理对象。
+ - [AopProxyFactory](spring-aop/spring-aop-aopProxyFactory/README.md):创建AOP代理工厂,支持JDK和CGLIB。
- [Advisor](spring-aop/spring-aop-advisor/README.md):用于将通知和切点结合,实现切面编程的横切关注点。
- [AdvisorAdapter](spring-aop/spring-aop-advisorAdapter/README.md):适配不同类型通知到拦截器链。
- - [Advised](spring-aop/spring-aop-advised/README.md):配置AOP代理的通知、通知器、目标等。
- [TargetSource](spring-aop/spring-aop-targetSource/README.md):管理AOP代理对象的获取与释放。
- [TargetSourceCreator](spring-aop/spring-aop-targetSourceCreator/README.md):创建特殊的目标源,定制代理对象的创建和管理。
- [@EnableAspectJAutoProxy](spring-aop/spring-aop-enableAspectJAutoProxy/README.md):启用AspectJ切面自动代理。
diff --git a/spring-aop/spring-aop-advisor/README.md b/spring-aop/spring-aop-advisor/README.md
index df1bcff..a12a9cc 100644
--- a/spring-aop/spring-aop-advisor/README.md
+++ b/spring-aop/spring-aop-advisor/README.md
@@ -23,19 +23,10 @@
1. **组合切点和通知**
+ Advisor接口允许将切点(Pointcut)和通知(Advice)组合在一起。切点确定何时应该应用通知,而通知定义了在连接点处执行的代码。
-
-2. **定义横切逻辑**
-
- + 通过Advisor接口及其实现类,可以定义在应用程序中何时、何地以及如何应用横切关注点(cross-cutting concerns),如日志记录、事务管理、安全性等。
-
3. **提供AOP配置的抽象**
+ Advisor接口是AOP配置的一种抽象,它使得可以通过编程方式或声明式的方式定义切面,并将它们应用到目标对象上。
-4. **实现面向切面编程**
-
- + Advisor接口是面向切面编程(AOP)的核心组件之一,它允许我们在不改变业务逻辑的情况下,通过切面来管理横切关注点,从而提高代码的模块化和可维护性。
-
### 四、接口源码
`Advisor`接口是Spring框架中的一个基础接口,用于持有AOP通知(在连接点执行的操作)和确定通知适用性的过滤器(例如切点)。该接口定义了获取通知部分的方法`getAdvice()`,以及确定通知是否与特定实例相关联的方法`isPerInstance()`。同时,该接口还提供了一个常量`EMPTY_ADVICE`,用作当未配置适当通知时的占位符。在Spring AOP中,Advisor接口允许支持不同类型的通知,例如拦截器、前置通知、异常通知等,并且并非所有通知都需要使用拦截来实现。
@@ -207,28 +198,16 @@ Executing bar method
1. **切点定义错误**
- + 定义切点时可能会出现错误,导致切面未能正确地匹配到预期的连接点。这可能是因为切点表达式错误,或者切点逻辑与实际场景不匹配。
+ + 切点定义不准确或逻辑错误,导致切面无法正确地匹配到预期的连接点。
-2. **通知应用顺序错误**
+2. **通知逻辑错误**
- + 当存在多个Advisor时,通知的应用顺序可能会影响最终的切面逻辑。如果通知的应用顺序不正确,可能会导致意外的行为或不一致的结果。
+ + 通知逻辑的实现可能存在错误,导致切面的行为与预期不符。
-3. **切面匹配范围不正确**
+3. **切面顺序问题**
- + 切面的匹配范围可能过于宽泛或过于狭窄,导致通知被应用于不希望被影响的连接点,或者未能影响到应该被影响的连接点。
+ + 当存在多个Advisor时,通知的应用顺序可能会影响最终的切面逻辑,需要正确地管理切面的顺序。
-4. **性能问题**
+4. **切面匹配范围问题**
- + 使用过多或过于复杂的切面可能会影响应用程序的性能。因此,在设计切面时需要考虑性能问题,并尽量减少切面的数量和复杂度。
-
-5. **代理问题**
-
- + 如果代理配置不正确,可能会导致切面无法正确应用。例如,如果代理对象的类型与切面匹配范围不一致,或者代理对象不符合切面的预期行为,都可能导致切面无法正确工作。
-
-6. **异常处理问题**
-
- + 切面中的异常处理可能会影响应用程序的正常运行。如果异常处理不正确,可能会导致应用程序无法正确处理异常情况,从而影响用户体验。
-
-7. **与其他切面冲突**
-
- + 如果存在多个切面,并且它们的匹配范围有重叠,可能会导致切面之间的冲突。例如,两个切面都匹配同一个连接点,并且它们的通知行为相互矛盾,可能会导致意料之外的结果。
\ No newline at end of file
+ + 切面匹配范围过于宽泛或过于狭窄,导致切面的逻辑影响到不应该被影响的连接点,或者未能影响到应该被影响的连接点。
\ No newline at end of file
diff --git a/spring-aop/spring-aop-advisor/src/main/java/com/xcs/spring/MyCustomAdvisor.java b/spring-aop/spring-aop-advisor/src/main/java/com/xcs/spring/MyCustomAdvisor.java
index acf64b3..1d2f9e2 100644
--- a/spring-aop/spring-aop-advisor/src/main/java/com/xcs/spring/MyCustomAdvisor.java
+++ b/spring-aop/spring-aop-advisor/src/main/java/com/xcs/spring/MyCustomAdvisor.java
@@ -2,13 +2,13 @@ package com.xcs.spring;
import org.aopalliance.aop.Advice;
import org.springframework.aop.Pointcut;
-import org.springframework.aop.support.AbstractPointcutAdvisor;
+import org.springframework.aop.PointcutAdvisor;
import org.springframework.aop.support.annotation.AnnotationMatchingPointcut;
/**
* 自定义Advisor,用于将通知应用于带有特定注解的方法。
*/
-public class MyCustomAdvisor extends AbstractPointcutAdvisor {
+public class MyCustomAdvisor implements PointcutAdvisor {
/**
* 通知对象
@@ -29,4 +29,9 @@ public class MyCustomAdvisor extends AbstractPointcutAdvisor {
public Advice getAdvice() {
return advice;
}
+
+ @Override
+ public boolean isPerInstance() {
+ return true;
+ }
}