使用其他罐子的方面

rpv*_*lao 6 java aspectj aspects maven

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

我有一个具有以下结构的服务器.

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

你应该知道的事情:

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

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

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

提前致谢,

yeg*_*256 3

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

<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>
Run Code Online (Sandbox Code Playgroud)

provided将方面 JAR 放在( 或) 范围内是可以的runtime