我需要使用spring-aop拦截带注释的方法。 我已经有了拦截器,它实现了AOP Alliance的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注释来指定拦截器何时应该拦截某些内容但不再存在。
任何人都可以帮助我吗?
非常感谢!
卢卡斯
答案 0 :(得分:3)
MethodInterceptor
bean可以调用 Advisor
,如下所示。
@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());
}
}
答案 1 :(得分: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
...
}
}
如果有其他人发现不同的东西,请随意发布!
此致
卢卡斯