5

我需要使用 spring-aop 拦截带注释的方法。我已经有了拦截器,它实现了 AOP 联盟的 MethodInterceptor。

这是代码:

@Configuration
public class MyConfiguration {

    // ...

    @Bean
    public MyInterceptor myInterceptor() {
      return new MyInterceptor();
    }
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    // ...
}
public class MyInterceptor implements MethodInterceptor {

    // ...

    @Override
    public Object invoke(final MethodInvocation invocation) throws Throwable {
        //does some stuff
    }
}

从我一直在阅读的内容来看,我可以使用@SpringAdvice 注释来指定拦截器何时应该拦截某些东西,但它不再存在。

谁能帮我?

非常感谢!

卢卡斯

4

2 回答 2

4

MethodInterceptor可以通过注册一个Advisorbean来调用,如下所示。

@Configurable
@ComponentScan("com.package.to.scan")
public class AopAllianceApplicationContext {    

    @Bean
    public Advisor advisor() {
       AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();    
       pointcut.setExpression("@annotation(com.package.annotation.MyAnnotation)");
       return new DefaultPointcutAdvisor(pointcut, new MyInterceptor());
    }

}
于 2017-03-19T06:11:07.007 回答
2

万一有人对此感兴趣……显然这是做不到的。为了单独使用 Java(而不是 XML 类),您需要使用带有 @aspect 注释的 AspectJ 和 Spring。

代码是这样结束的:

@Aspect
public class MyInterceptor {

    @Pointcut(value = "execution(* *(..))")
    public void anyMethod() {
       // Pointcut for intercepting ANY method.
    }

    @Around("anyMethod() && @annotation(myAnnotation)")
    public Object invoke(final ProceedingJoinPoint pjp, final MyAnnotation myAnnotation) throws Throwable {
        //does some stuff
        ...
    }
}

如果其他人发现了不同的东西,请随时发布!

问候,

卢卡斯

于 2012-12-17T13:59:33.720 回答