使用其他罐子的方面

时间:2011-05-20 15:35:33

标签: java maven aspectj aspects

我想要完成的是以下内容:

我有一台具有以下结构的服务器。

bin
   apis
   services
   etc...

我想定义一个包含服务使用方面的API。说:

@Aspect
public class AuthorizationAspect {
    @Pointcut("call(* *()) && @annotation(Authorization)")
    public void cutAuthorize() { }

    @Before("cutAuthorize()")
    public void callFromAuthorizeBefore() {
        System.out.println("Test");
    }
}

然后我定义服务并使用@Authorization注释我想要的方法,并通过该方面获得切入点。

你应该知道的事情:

  • 服务仅使用API​​来编译代码,因此范围是“提供的”,因为API已经在服务器中。
  • 服务JAR是动态加载的,因此它们将驻留在另一个类加载器中。

我的问题是,我该怎么做?如何定义我的maven工件来实现它?

我注意到aspectj插件有一个weaveDependencies部分,但是这也将在服务JAR中包含该API中的所有类(我想要避免的事情)。这是正确的举动吗?

提前致谢,

1 个答案:

答案 0 :(得分:3)

jcabi-aspects中查看它是如何完成的。您在API中声明/编译方面,然后在示例中使用com.jcabi:jcabi-aspects时使用此JAR:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <configuration>
    <aspectLibraries>
      <aspectLibrary>
        <groupId>com.jcabi</groupId>
        <artifactId>jcabi-aspects</artifactId>
      </aspectLibrary>
    </aspectLibraries>
  </configuration>
</plugin>

将方面JAR放在provided(或runtime)范围内即可。