【问题标题】:AspectJ annotation pointcut not triggered for interface annotations接口注释未触发 AspectJ 注释切入点
【发布时间】:2011-09-29 11:35:39
【问题描述】:

如何创建一个切入点来匹配带有注解的方法或其接口方法带有注解的方法?

public interface IService {
    @SomeAnnotation
    public void someMethod() { ... }
}

public class Service implements IService {
    public void someMethod() { ... }
}

我正在使用 Spring AOP 进行 AspectJ 自动代理。但是,如果我定义一个像

这样的切入点
execution(public * *(..)) && @annotation(SomeAnnotation)

该建议未应用于 Service 上的 someMethod 方法。

仅使用接口方法上带有注释的事实来匹配该方法的正确切入点是什么?可能吗?

如果我将注解放在 Service someMethod 方法上,上述切入点有效,但在我的情况下,这不是一个好的解决方案,因为注解是合同的一部分,因此必须是接口的一部分,而不是执行。

【问题讨论】:

标签: java spring annotations aspectj


【解决方案1】:

根据 Java 5 规范,非类型注解不会被继承,而类型上的注解只有在具有 @Inherited 元注解时才会被继承。

http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-pointcuts-and-advice.html#annotation-inheritance-and-pointcut-matching

【讨论】:

  • 这不能回答问题,因为它适用于方法注释,而不是类注释。
  • @hstoerr 我想我们在谈论方法注释
  • 问题是关于方法的注释,@Inherited 仅适用于类注释。甚至不适用于接口!
  • @Hossein 我从来没有说过@Inherited 会解决这个问题,我只是引用了为什么它不起作用。
  • @LeonardBrünings 但你写的并没有回答问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多