運用Spring 的 Aspect 在request 進入Contraller 之前, 把ProceedingJoinPoint 改為JointPoint, 做String Convertion
时间: 2024-10-04 07:02:50 浏览: 25
dfd-contraller
在Spring框架中,Aspect Oriented Programming (AOP) 提供了一种处理横切关注点(如日志、事务管理等)的方式。如果你想在请求进入Controller之前,对`ProceedingJoinPoint`进行字符串转换,这通常是在使用Spring AOP的Advice中完成的。首先,你需要创建一个自定义的Advisor或通知(Advice),这个通知会在特定的方法签名匹配时被调用。
以下是一个简单的示例,说明如何创建一个BeforeAdvice,用于在Controller方法执行前进行字符串转换:
```java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.springframework.stereotype.Component;
@Component
public class StringConversionAspect {
@Around("execution(* com.example.package.*.controllers.*Controller.*(..))") // 替换为实际的Controller包名
public Object convertStrings(ProceedingJoinPoint pjp) throws Throwable {
// 获取原始方法参数
Object[] args = pjp.getArgs();
// 遍历参数并进行转换
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof String) { // 如果参数是String类型
args[i] = "Converted: " + ((String) args[i]); // 进行转换
}
}
// 将转换后的参数设置回JoinPoint,继续执行原方法
return pjp.proceed(args);
}
}
```
在这个例子中,`@Around`注解表示这是一个环绕通知(around advice),它会在方法执行前后都运行。`execution(* com.example.package.*.controllers.*Controller.*(..))`是切入点表达式,指定我们希望应用这个 Advice 的所有 Controller 方法。
当你有请求进入这样的Controller时,Spring AOP会在方法执行前先调用我们的`convertStrings`方法,然后传递已转换的参数给原方法执行。
阅读全文