6

私が達成しようとしていることは次のとおりです。

次のような構造のサーバーがあります。

置き場
   apis
   サービス
   等...

サービスで使用されるアスペクトを含む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セクションがあることに気づきましたが、これにはそのAPIのすべてのクラス(私が避けたいもの)もサービスJARに含まれます。これは正しい動きですか?

前もって感謝します、

ルイ

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 に答える