AOPのXML設定ファイルに基づいて、春のフレームワークの学習(3.1)

序文

学習プロセス記録
プログラミングパラダイムが懸念向上モジュールをクロスカットの分離を可能にすることによって、AOP(アスペクト指向プログラミングアスペクト指向プログラミング)される、AOPは、モジュラーオブジェクトの問題を横切ってカットに提供します

簡単な紹介

ISを行うには、ログ、取引、物事のビジネスロジックを実装する際に、システム全体に散らばっセキュリティ検証に注意が必要な「フォーカス」、「カット」と呼ばれ、AOPは、システムから「カット」を分離して、達成することに焦点を当て別々のコードとコードの運用面を書くために、システムは、システムへの「織り」の用語で、実行されています。
AOPを使用する場合、セクション、通知、エントリポイント、ターゲット・オブジェクトは、プロキシオブジェクト、概念を織りを含みます

  • カットは、
    ストレージ機能を共有し、一般的に、プレーンJavaクラスはコンテナ部として識別される、AOPに実装されている、豆タグが設定で指定する必要が実用に、このようなカット・ログ、トランザクション・セクションなどの共有機能を達成することです
  • 通知が
    配置位置に応じて、ターゲットメソッドへの参照点として、セクションで具体化される前の通知、リア通知、異常通知、通知、最終通知サラウンドに分割することができる、態様のクラスは、特定の方法のタイプであります通知は、設定で指定する必要があります
  • ポイントカット
    の接続点に織り込まれるべき通知を定義します
  • 視聴者
    対象区間に織り込まれるための手段、すなわち、それらのオブジェクトを通知します
  • プロキシオブジェクト
    ターゲットオブジェクトへの通知後、オブジェクトが動的に作成されます
  • 織り込ま
    セクションプロセスの新しいプロキシオブジェクトを作成し、ターゲットオブジェクトに適用されます

認識に基づいてAOP XML設定ファイル

事前通知プロファイルを達成するためのXMLベースのアプローチ

アドバイスの前に

例外がここにスローされない限り、接続点の前で実行するための事前通知(織りビジネス方法)は、接続ポイントの実装には影響しません
例えば:
(1))(メソッドの参照を追加し、インターフェイスMealServiceを作成し、シミュレートユーザーの閲覧商品ビジネス

package com.BeforeAdvice.Service;

public interface MealService {
    public void browse(String LoginName,String mealName);
}

(2)MealService実装クラスを作成MealServiceImpl

package com.BeforeAdvice.Impl;

import com.BeforeAdvice.Service.MealService;
import org.springframework.stereotype.Service;

@Service("mealService")
public class MealServiceImpl implements MealService {
    @Override
    public void browse(String LoginName, String mealName) {
        System.out.println("执行业务方法browse");
    }
}

(3)ログ通知クラスLogAdviceを作成するには、調製方法は、ログレコード生成
(完了するために、スプリングのパッケージ構成を、またはバラ色になります)

package com.BeforeAdvice.Aop;

import org.springframework.stereotype.Controller;
import org.aspectj.lang.JoinPoint;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.text.SimpleDateFormat;

@Controller("logAdvice")
public class LogAdvice {
    //此方法将作为前置通知
    public void MyBeforeAdvice(JoinPoint joinpoint){
        //获得业务方法参数
        List<Object> list= Arrays.asList(joinpoint.getArgs());
        //日志格式字符串
        String logInfo="前置通知:"+
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+
                " "+list.get(0).toString()+" 浏览商品: "+list.get(1).toString();
        System.out.println(logInfo);
    }

}

(4)編集XML構成ファイル
製織MealServiceでログ通知ログ通知クラスLogAdviceを達成するために、AOP要素を介して構成AOP構成ログおよびビジネスコンポーネントクラスLogAdvice MealServiceを使用して、元々 2つの無関係なクラスおよびインタフェース

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--配置指定扫描的基包-->
    <context:component-scan base-package="com"></context:component-scan>

    <!--配置aop-->
    <aop:config>
        <!--配置日志切面-->
        <aop:aspect id="logaop" ref="logAdvice">
            <!--定义切入点、切入点采用正则表达式-->
            <aop:pointcut id="logpointcut" expression="execution(* com.BeforeAdvice.Service.MealService.*(..))"/>
                <!--将日志通知类中MyBeforeAdvice方法指定为前置通知-->
            <aop:before method="MyBeforeAdvice" pointcut-ref="logpointcut"/>

        </aop:aspect>
    </aop:config>

</beans>

AOPによって<AOP:態様>によって構成でAOPの構成要素の設定、子要素の構成ログセクション、セクションを構成する際に最初にすることにより、ログ<AOP:ポイントカット>ポイントカット子要素を定義する正規表現、使用のポイントカットcom.BeforeAdvice.Service.MealServiceはを通じて、インターセプトされているすべてのメソッドを意味し、入力し、<AOP:前>アドバイスの前にクラスに指定された子要素のMyBeforeAdviceログ通知方法
(5)テストクラスTestBeforeAdvice

package com.BeforeAdvice;

import com.BeforeAdvice.Service.MealService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBeforeAdvice {
    public static void main(String[] args){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

        MealService mealService=(MealService) context.getBean("mealService");
        mealService.browse("zhangsan","麻辣香锅");
    }
}

ここに画像を挿入説明
最初のログ出力通知クラスのロギングメソッドはLogAdviceを生成し、ブラウズサービス実行方法の前に見ることができます

リリース8元の記事 ウォンの賞賛0 ビュー165

おすすめ

転載: blog.csdn.net/key_768/article/details/103937105