自定义注释的拦截方面

Intercepting aspect for custom annotion

我正在写一个 library/sdk,它可以拦截任何用自定义注释 @Monitor 注释的方法。 代码有点像这样

@Monitor
public void methodA(String test)

拦截这个的方面有这个切入点表达式

@After("execution(@com.packageA.Monitor * *(..))")
public void intercept(final JoinPoint joinPoint){
...}

当我在与 methodA 相同的包中描述方面时,此代码工作正常。但是,如果我创建一个单独的库并定义方面,它无法拦截 methodA 。有帮助吗?

编辑

回应@Bond 的评论

@Component
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Monitor {

}

Spring 版本: spring-上下文 - 4.1.7.Release aspectj-1.6.5 问题的关键是不会在同一个项目中使用注释。编译后将一起用于不同的项目

编辑2

第二个项目,即这个方面应该拦截的项目是使用 aspectj maven 插件编译的

您需要将切入点更新为 @annotation(com.x.y.z.Monitor)。 (相应地更正包名称

因此你的外观应该如下所示

@After("@annotation(com.x.y.z.Monitor)") 
public void intercept(final JoinPoint joinPoint){
    ...
}

看看 examples for reference about various pointcut expressions available. Also read this 以防建议接受参数