AOP


観点に向けたプログラミング(AOP)


📌 AOPとは?


問題の観点に基づいてプログラミングする方法
AOPを実現する方法には多くの種類があり,通常,共通の注目点を実現するコードをコアロジックを実現するコードに挿入する.

Web上で使用されるインタフェースやフィルタがあります.
AOPはプログラミング方法です.
適用範囲は、汎用機能として、特定のパケットの特定のクラス全体、特定のクラスの特定のメソッド全体などに設定できます.
共通の機能=共通の興味
コアロジック=キーポイント
コアビジネス機能を区別するために、共通機能を共通注目点(横断注目点)と呼び、コアロジックをコア注目点(コア注目点)と呼ぶ.

📌 2.AOP主な用語

  • Joinpoint:Adviceに適したブランチ機構を指す.メソッド呼び出し、フィールド値の変更などはJoinpointに対応しています.
  • Point:Joinpointのサブセットで、Adviceが実際に適用されたJoinpointを表します.
  • Advice:汎用機能が適用されるタイミングを定義します.
  • Weaving:Adviceをコア論理コードに適用することを編成と呼ぶ.
  • Asspect:複数のオブジェクトに共通する機能をAsspectと呼ぶ.
  • 📌 3.エージェントベースのAOPアプリケーションプロセス



    汎用機能の呼び出し=callModule()
    コア機能の呼び出し=ビジネス()

    📌 4.スプリング上のAOP


    スプリング自体はエージェントベースのAOPをサポートする.
    Spring AOPはメソッド呼び出しJoinPointのみをサポートします.
    スプリングは完全なAOP機能を提供しない.
    エンタープライズアプリケーションの実装に必要な機能のみをサポートします.
    スプリングは、3つの方法でAOPを実現することを可能にする.
  • XMLアーキテクチャに基づくPOJOクラスを用いてAOP
  • を実現する.
  • AspectJによって定義された@Associationに基づくAOP実施
  • スプリングAPIを用いてAOP
  • を実現する
    AspectJを使用するにはpomを使用してください.xmlは依存項目を設定する必要があります.

    📌 5.実装可能な添付ファイルの種類



    コアロジックの「いつ」に汎用機能を適用するか(実行前/後、異常発生前/後)を定義します.
  • コンビネーションコンサルティングは、メソッドの実行前/後、異常発生前/後に目的の機能を挿入できる最も一般的なコンサルティングです.
  • 共通機能を挿入するタイミングを区別するために標準点が必要であり、パラメトリックなProcedingJoinPointタイプの「継続」()メソッドがこれらの標準点を実行します.
    したがって、最初のパラメータを使用してProcedinJoinPointタイプを指定する必要があります.
    Around Advisor以外のAdvisorは、より詳細に機能を実装するために使用され、それらの実装方法はわずかに異なる.

  • BeforeAdviceを実装するクラスの戻りタイプは、通常「void」です.
    戻り値があっても、実際のアプリケーションでは使用されないためです.

  • After Adviceを実装する方法で、ターゲットオブジェクトが戻り値を使用する場合は、戻り値を渡すパラメータの名前を戻り属性で指定します.

  • After Throwing Advice例外オブジェクトを使用する場合は、次の操作を行います.
    duppingプロパティを使用して、例外オブジェクトを受信するパラメータ名を指定します.
  • 「明示的な値を返すパラメータ名を指定し、返される値と発生した例外に基づいて、異なるビューを適用するためにパラメータ名を指定します.」

    📌 6.XMLベースのPOJOクラスを用いてAOPを実現


    aopネーミングスペースのXMLアーキテクチャが指定されている場合は、以下に示すようにタグを使用してaop関連情報を設定できます.
    <bean id="profiler" class="com.spring.exercise.aop.Profiler"/>
    
    <aop:config>
      <aop:aspect id="traceAspect" ref="profiler">
        <aop:pointcut id="publicMethod"
           expression="execution(public * com.spring.exercise..*(..))"/>
        <aop:around pointcut-ref="publicMethod" method="trace"/>
      </aop:aspect>
    </aop:config>
     
    <bean id="memberService" 
    	class="com.spring.exercise.member.MemberServiceImpl" />
    タグのrefプロパティは、汎用機能の表示を提供する空を設定するために使用されます.上のコードは、「profiler」がチェック機能を提供する空であることを指定します.
  • 「traceAsspect」という名前のAsspectは、MemberServiceImplクラスの共通メソッドのAround Advisorです.
  • 「traceAsspect」を実現するためのProfiler Binの「trace」手法により汎用機能が提供される.
  • :AOP設定情報であることを示します.
  • :ビューを設定します.
  • :pointcutを設定します.
  • :Around Adviceを設定します.それ以外にも、複数のコンサルティングを設定することができます.
  • 📌 7.@Asspecter宣言に基づくAOP

  • @Asspecter novationを使用してAsspectクラスを実装します.この場合、Asspectクラスには、Adviceを実装する方法とPointcutが含まれる.
  • XML設定でを設定します.
  • タグを登録しない場合、@Aspect関連の宣言は使用できません.

    7.1 @Pointcut


    @Pointcutをメソッドに適用したり、@Aroundプロパティからこのメソッドを呼び出すことで設定を簡略化したり、複数のAdviceで使用したりすることもできます.
    @Pointcut言語で位置決めする方法を参照するには、次のように入力します.
    @Pointcutメソッドは同じクラス
  • にあり、「メソッド名」
  • のみを入力します.
    @Pointcutメソッドは
  • などのパッケージにあり、「クラス単純名」です.メソッド名を入力
  • @Pointcutメソッドは
  • の他のパッケージにあり、完全なクラス名です.メソッド名を入力
  • 7.2 @Joinpoint


    JoinpointはPointを含む
    したがって、Pointcutは詳細な指定に使用されます.
    Around Advisorはキー機能の前後を指定していないため、JoinPointを基準に前後を区別するため、JoinPointタイプは最初のパラメータとして使用する必要があります.
    Around Advisorに加えて、他のAdvisorタイプを実装する方法は、JoinPointオブジェクトを選択的に使用することができる.
    ProceedingJoinPointのプロセス()メソッドを呼び出すと、プロキシターゲットオブジェクトの実際のメソッドが呼び出されます.実際のメソッドが呼び出されるので,実際のメソッドの前後を区別することができる.
    99 spring AOPはインタフェースを使用してプロキシオブジェクトを作成し、instanceof演算子でインタフェース実装クラスをチェックするとfalseを返します.インタフェース条件ではなくクラスに基づいてプロキシを作成するには:
    登録タグ.登録後、instanceof演算子を使用して実装クラスをチェックすると、trueが正しく返されます.

    📌 8.実行指示者


    execution(修飾子?戻りタイプクラス名?メソッド名(パラメータ)
    Spring AOPはパブリックメソッドのみに適用されるため、「修飾語」の部分は省略できます.
    各アレイでは、すべての値を「*」で表すことができます.「...」0個以上の意味で使うことができます.

    📌 9.デバイス適用順序


    デバイスの適用順序を明示的に指定するには、@Order宣言を適用するか、Orderedインタフェースを実装します.
    @Aspect
    public class Exercise implements Ordered {
    	@Override
        public int getOrder() {
        	return 2;
    }
    @Order宣言を使用する場合は、値を使用して適用順序を指定します.
    @Order(3)
    実行前は順番に適用し、実行後は逆順に適用します.
    (出典:Spring 4.0プログラミングWeb開発者用、著者:崔凡均)