コンテンツにスキップ

AspectJ

出典: フリー教科書『ウィキブックス(Wikibooks)』

概要

[編集]

AspectJは、プログラミング言語Javaアスペクト指向プログラミング(AOP)拡張です。クロスカッティングコンサーン(横断的関心事)を効果的に管理し、モジュール化することができます。

アスペクト指向プログラミングの基本概念

[編集]

Join Point(ジョインポイント)

[編集]

プログラムの実行中の特定の点を指します。例えば:

  • メソッドの呼び出し
  • メソッドの実行
  • フィールドへのアクセス
  • コンストラクタの実行
  • 例外のハンドリング

Pointcut(ポイントカット)

[編集]

Join Pointを選択するためのパターン記述です。主な記述方法:

  • execution(): メソッド実行の選択
  • call(): メソッド呼び出しの選択
  • get()/set(): フィールドアクセスの選択
  • within(): 特定のクラス/パッケージ内の選択

Advice(アドバイス)

[編集]

Join Pointで実行される追加のコード。タイミングによって分類:

  • before: Join Point前に実行
  • after: Join Point後に実行
  • around: Join Point前後で実行
  • after returning: 正常終了後に実行
  • after throwing: 例外発生時に実行

基本的な構文

[編集]

アスペクトの定義

[編集]
public aspect LoggingAspect {
    pointcut businessMethod() : 
        execution(* com.example.*.*(..));
    
    before() : businessMethod() {
        System.out.println("メソッド実行開始");
    }
    
    after() : businessMethod() {
        System.out.println("メソッド実行終了");
    }
}

ポイントカットの例

[編集]
// すべてのパブリックメソッド
pointcut publicMethods() : 
    execution(public * *(..));

// 特定パッケージのメソッド
pointcut serviceMethods() : 
    execution(* com.example.service.*.*(..));

// getterメソッド
pointcut getters() : 
    execution(* get*()) && within(com.example.*);

高度な機能

[編集]

Inter-type Declaration(ITD)

[編集]

既存のクラスにメンバーを追加する機能:

public aspect SecurityAspect {
    // クラスにフィールドを追加
    private String Account.securityLevel;
    
    // メソッドを追加
    public void Account.setSecurityLevel(String level) {
        this.securityLevel = level;
    }
}

アスペクトの優先順位

[編集]

複数のアスペクトの実行順序を制御:

public aspect HighPriorityAspect {
    declare precedence: 
        HighPriorityAspect, 
        LoggingAspect, 
        SecurityAspect;
}

ツールとインテグレーション

[編集]

開発環境

[編集]
  • Eclipse AJDT (AspectJ Development Tools)
  • IntelliJ IDEA AspectJ プラグイン
  • Maven AspectJ プラグイン

ビルドツール統合

[編集]

Maven設定例:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.14.0</version>
    <configuration>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

ベストプラクティス

[編集]

アスペクト設計のガイドライン

[編集]
  • 単一責任の原則を守る
  • ポイントカットは明確で保守可能な表現を使用
  • アドバイスは小さく保つ
  • 適切なエラーハンドリングを実装
  • パフォーマンスへの影響を考慮

よくある使用例

[編集]
  • ログ記録
  • セキュリティチェック
  • トランザクション管理
  • パフォーマンスモニタリング
  • キャッシング
  • エラーハンドリング

トラブルシューティング

[編集]

一般的な問題と解決策

[編集]
  • ポイントカットが期待通りに動作しない
    • ポイントカット表現の検証
    • AJDT可視化ツールの使用
  • 実行時のパフォーマンス問題
    • プロファイリングツールの使用
    • アスペクトの最適化
  • コンパイルエラー
    • AspectJバージョンの確認
    • クラスパスの設定確認

参考資料

[編集]

ライセンス

[編集]

AspectJはEclipse Public License v2.0の下で提供されています。