拦截自定义注释的方面

时间:2015-08-18 18:05:43

标签: java aop aspectj spring-aop pointcut

我正在编写一个库/ 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-context - 4.1.7。发布 aspectj - 1.6.5 问题的关键在于注释不会在同一个项目中使用。编译后,它将在一个不同的项目中一起使用。

EDIT2

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

1 个答案:

答案 0 :(得分:0)

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

因此,您的方面应该如下所示

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

查看examples以获取有关可用的各种切入点表达式的参考。如果建议接受参数

,也请阅读this