@Around("pointCutIAntiResubmit(iAntiResubmit)") public Object aroundAdvice(ProceedingJoinPoint pjp, IAntiResubmit iAntiResubmit) { String key = loadKey(iAntiResubmit.key(), pjp); String redisKey = RedisConstants.ANTI_RESUBMIT_REDIS_KEY + RedisConstants.SEPARATOR + getValue(pjp, iAntiResubmit) + "::" + key; RLock lock = redissonClient.getLock(redisKey); try { Object[] args = pjp.getArgs();// 得到方法执行所需的参数 lock.lock(); return pjp.proceed(args);// 明确调用切入点方法(切入点方法) } catch (SysException se) { throw se; } catch (Throwable e) { throw new SysException(e.getMessage()); } finally { lock.unlock(); } }这里的iAntiResubmit.key()是不是为空
时间: 2024-02-14 07:33:09 浏览: 75
如果IAntiResubmit注解被正确地使用,并且在使用该注解时为key成员变量显式地赋值,那么iAntiResubmit.key()应该是非空的。
在上面的代码中,通过iAntiResubmit.key()获取IAntiResubmit注解的key成员变量的值,并将其作为loadKey方法的第一个参数。如果IAntiResubmit注解的key成员变量没有显式地赋值,那么iAntiResubmit.key()将返回空字符串,但是在loadKey方法中,空字符串会被视为无效的key值,可能会导致程序出错。
因此,在使用IAntiResubmit注解时,应该为其key成员变量显式地赋值,以确保程序能够正确地执行。
相关问题
import org.aspectj.lang.ProceedingJoinPoint.procced
ProceedingJoinPoint是Spring AOP中的一个接口,它继承了JoinPoint接口,并在其基础上暴露了proceed()方法[^1]。proceed()方法是用于启动目标方法执行的,它在环绕通知中起到关键作用。环绕通知由前置通知、目标方法执行和后置通知组成,而proceed()方法决定了是否继续执行代理链或者执行其他拦截逻辑。
在Spring AOP中,proceed()方法只在环绕通知中被支持,而其他类型的通知(如前置通知、后置通知)只需要使用JoinPoint接口即可。通过调用proceed()方法,可以决定是否继续执行代理链或者执行其他逻辑。
以下是一个使用ProceedingJoinPoint的示例代码:
```java
import org.aspectj.lang.ProceedingJoinPoint;
public class MyAspect {
public Object aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 在目标方法执行之前的逻辑
System.out.println("Before advice");
// 执行目标方法
Object result = proceedingJoinPoint.proceed();
// 在目标方法执行之后的逻辑
System.out.println("After advice");
return result;
}
}
```
在上述示例中,aroundAdvice()方法是一个环绕通知,它接收一个ProceedingJoinPoint参数。在方法中,我们可以在目标方法执行之前执行一些逻辑,然后调用proceed()方法来启动目标方法的执行,最后在目标方法执行之后执行一些逻辑。
@Around 参数用法
@Around是Spring AOP中的一个注解,用于实现环绕增强(Around Advice)。它可以在目标方法执行前后进行拦截,并且可以控制目标方法的执行。在使用@Around注解时,需要注意以下几点:
1. @Around注解的参数应该是一个方法签名,而不是runTime。这是因为@Around注解需要指定一个切入点表达式,用于确定哪些方法需要被拦截。方法签名可以包含方法名、参数类型和返回类型等信息,以便准确地匹配目标方法。
2. @Around注解可以携带参数,这取决于自定义的注解中是否携带参数。如果自定义的注解中携带了参数,那么在增强处理类中也可以使用这些参数。通过在@Around注解中使用参数,可以在拦截方法执行前后对参数进行处理或传递额外的参数给目标方法。
下面是一个示例代码,演示了@Around注解的使用方法:
```java
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* com.example.MyService.*(..))")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Before method execution");
Object result = joinPoint.proceed();
System.out.println("After method execution");
return result;
}
}
```
在上面的代码中,@Around注解被用于定义一个环绕增强的方法aroundAdvice。该方法会在目标方法执行前输出"Before method execution",在目标方法执行后输出"After method execution"。通过调用joinPoint.proceed()方法,可以继续执行目标方法。
阅读全文