【问题标题】:Spring AOP - pointcut for every method with an annotationSpring AOP - 带有注释的每个方法的切入点
【发布时间】:2011-12-10 16:41:40
【问题描述】:

我正在尝试定义一个切入点,该切入点将捕获使用(即)@CatchThis 注释的每个方法。这是我自己的注释。

此外,我想访问该方法的第一个参数,它将是Long 类型。可能还有其他争论,但我不在乎。


编辑

这就是我现在所拥有的。我不知道的是如何传递带有@CatchThis注解的方法的第一个参数。

@Aspect 
public class MyAspect {
    @Pointcut(value = "execution(public * *(..))")
    public void anyPublicMethod() {
    }

    @Around("anyPublicMethod() && @annotation(catchThis)")
    public Object logAction(ProceedingJoinPoint pjp, CatchThis catchThis) throws Throwable {
        return pjp.proceed();
    }
}

【问题讨论】:

    标签: java spring aop spring-aop pointcut


    【解决方案1】:

    应该这样做:

    @Aspect
    public class MyAspect{
    
        @Pointcut(value="execution(public * *(..))")
        public void anyPublicMethod() {
        }
    
        @Around("anyPublicMethod() && @annotation(catchThis) && args(.., Long ,..)")
        public Object logAction(
            ProceedingJoinPoint pjp, CatchThis catchThis, Long long)
            throws Throwable {
    
            return pjp.proceed();
        }
    }
    

    【讨论】:

    • 我已经更新了我的帖子。你能对你的 sn-p 做同样的事情吗?我将不胜感激。
    • 谢谢。是否有可能捕获具有 ONE Long 参数但不一定是第一个参数的方法 - 它可以是第一个、第二个.. 或最后一个?
    • Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'piano' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut 这就是我试图使用你的方面..我迷路了。 + 我从 args(..) 中删除了第一个 .. - 当时的错误不同。
    • 我尝试了整个下午都在寻找的答案,它以一种非常简单的方式起作用。我很惊讶 aspecj 和 spring 的强大程度,而且我的 Intellij IDEA 知道该切入点通过静态代码分析是有效的。不幸的是,我可以在 spring 官方文档上找到这个特定问题的答案。
    • 这个切入点表达式是否也会覆盖非弹簧管理的对象?这意味着如果我在一个简单的 POJO 上使用 @CatchThis 注释,切入点表达式会评估它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多