从其他模块调用方法时的建议

时间:2011-05-27 13:30:01

标签: aop aspectj

我有三个不同的maven模块:

  • security-api,包含注释和Aspect。
  • 使用“security-api”中的烤箱类编译的模块。
  • 客户端通过API从“模块”调用带注释的方法。

所有内容都将在同一个JVM中运行。

来自“模块”

@Authorization
public String getString(Subject s) {
  return "hello";
}

“security-api”中的方面

@Aspect
public class AuthorizationAspect {
    @Pointcut(""
    + "execution(* *(org.apache.shiro.subject.Subject, ..)) && "
    + "@annotation(com.company.Authorization) && "
    + "@this(c)")
    public void cutAuthorize(Authorization c) { }

    @Before("cutAuthorize(c)")
    public void callFromAuthorizeBefore(Authorization c) {
        System.out.println("> " + c);
    }
}

所以,我想要的是当我从其他模块调用getString(subject)时,我想运行cutAuthorize()。我可以执行这个指定一个调用切入点,但只有当调用发生在同一模块中时才会被捕获,即如果我在“模块”中调用注释方法一切正常,但由于我通过接口从其他方法调用建议没有运行。

任何人都知道我必须使用什么切入点才能在运行时为某些代码提供建议,而不是在调用它时?我不知道自己是否清楚自己,但我想做的事情有点难以解释。

提前致谢,

1 个答案:

答案 0 :(得分:1)

对于aspectj编译器,您需要register the security model as aspect library,这应该是全部。