proceedingjoinpoint和joinpoint
时间: 2023-05-01 09:04:12 浏览: 123
"proceedingjoinpoint" 和 "joinpoint" 都属于面向切面编程(AOP)的概念。其中,"joinpoint"表示程序执行的一个时刻,而"proceedingjoinpoint"表示在AOP中代表被拦截的方法,这个方法可以被拦截器拦截并干预其执行。
相关问题
ProceedingJoinPoint 和 JoinPoint什么区别
ProceedingJoinPoint和JoinPoint是AspectJ中的两个接口,它们的区别在于功能和使用场景。JoinPoint接口是ProceedingJoinPoint接口的父接口。
JoinPoint接口用于表示连接点,即在程序执行过程中的特定位置,例如方法调用、方法参数、异常抛出等。通过JoinPoint接口,我们可以获取连接点的相关信息,如方法名、参数值等。它是AOP中各种通知方法的参数之一,可以通过将第一个入参声明为JoinPoint类型来访问连接点上下文的信息。
ProceedingJoinPoint接口继承自JoinPoint接口,在JoinPoint的基础上增加了一个proceed()方法。proceed()方法的作用是让目标方法继续执行,这是在环绕通知中的一个重要步骤。通过调用proceed()方法,可以触发AOP代理链的执行。环绕通知和前置、后置通知的一个最大区别就在于是否调用proceed()方法。
简而言之,JoinPoint接口用于获取连接点信息,而ProceedingJoinPoint接口除了可以获取连接点信息外,还可以控制连接点的执行流程。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [proceedingjoinpoint和joinpoint区别](https://blog.csdn.net/sinat_19528249/article/details/105035791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [JoinPoint和ProceedingJoinPoint区别](https://blog.csdn.net/m_shang/article/details/114538561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
運用Spring 的 Aspect 在request 進入Contraller 之前, 把ProceedingJoinPoint 改用JoinPoint, 做String Convertion
在Spring框架中,如果你想要在请求进入Controller之前对所有请求进行字符串转换,可以使用Spring AOP(Aspect Oriented Programming,面向切面编程)。你可以创建一个切面(Aspect),并在其中定义一个前置通知(@Before advice),在该通知中将`ProceedingJoinPoint`转换成`JoinPoint`对象。
首先,你需要定义一个Advisor,比如一个`@Around`注解的方法,这个方法会在目标方法执行前运行:
```java
@Around("execution(* com.example.web.controllers.*.*(..))")
public Object handleRequest(ProceedingJoinPoint joinPoint) throws Throwable {
// 将 ProceedingJoinPoint 转换为 JoinPoint
JoinPointjp = joinPoint.getThis().toString(); // 这里只是一个例子,实际转换需处理更多细节
// 对字符串进行转换
String input = (String) joinPoint.getArgs()[0]; // 假设第一个参数是要转换的字符串
String convertedInput = convertToString(input);
// 如果转换成功,继续执行原始方法
joinPoint.proceed(convertedInput);
return null; // 返回值通常是不需要的,除非你想改变方法的行为
}
```
在这个示例中,`convertToString()`是一个用于将输入字符串转换的自定义方法。
请注意,上述代码简化了实际情况,实际操作可能会涉及到更复杂的类型检查、异常处理以及更精确地定位要应用转换的目标参数。
阅读全文