6

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

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

斌
   蜜蜂
   服务
   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 中的所有类(我想避免的事情)。这是正确的举动吗?

提前致谢,

4

1 回答 1

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)范围内。

于 2013-01-01T07:14:06.837 回答