AOP——0 can‘t find referenced pointcut runTime 错误

起因

自己定义了一个切面注解,及处理方法,将他打包封装后供外部调用。

依赖jar包 aspectjweaver 版本 1.8.9

具体代码如下:

/**
 * 统计一个方法耗时注解
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeCost {
}
/**
 * 计算耗时注解的实际计算过程方法
 */
@Aspect
@Component
@Order(10)
public class CostTimeAspect {
    private Logger logger = LoggerFactory.getLogger(CostTimeAspect.class);
    @Pointcut(value = "@annotation(com.yuxuntoo.www.common.annotations.TimeCost)")
    public void costTime(){ }

    @Around("runTime()")
    public Object costTimeAround(ProceedingJoinPoint joinPoint) {
    }
 }

问题

Caused by: java.lang.IllegalArgumentException: error at ::0 can't find referenced pointcut runTime

这个错误着实让我头疼了一上午,没有找到解决思路。这个错误是和我们的aop切面有关系,从这个方位入手,查找是否引错了包信息或者导错包?

经过一番排查都没有错误。

解决方法

后来经过排查,发现是自己的写法有问题,在@Around的参数中我们使用的是runtime(),这里是有问题的!

@Around: 环绕增强,相当于MethodInterceptor.

这里Around的value参数应该写的是上面的签名,而不是runTime,如果@Around 参数值里 “@annotation (timeCost)" 是为了匹配 costTimeAround 方法的入参 timeCost,名称要相同。

@Around("costTime()") public Object costTimeAround(ProceedingJoinPoint joinPoint,TimeCost timeCost) { }

这样调整一下在启动就不会出现上面问题中的错误了!

知识拓展

Aop的一些常用基本概念

Advice(通知、切面): 某个连接点所采用的处理逻辑,也就是向连接点注入的代码, AOP在特定的切入点上执行的增强处理。

  • @Before: 标识一个前置增强方法,相当于BeforeAdvice的功能.
  • @Around: 环绕增强,相当于MethodInterceptor.
  • @After: final增强,不管是抛出异常或者正常退出都会执行.
  • @AfterReturning:  后置增强,似于AfterReturningAdvice, 方法正常退出时执行.
  • @AfterThrowing:  异常抛出增强,相当于ThrowsAdvice.

以上这些基础的概念有助于我们更好的理解什么是面向切面编程O(∩_∩)O哈哈~。

好了,今天的问题先到这里,感谢大家的观看!

欢迎大家关注我的  公  众   号  《coder练习生》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值