序文
学習プロセス記録
プログラミングパラダイムが懸念向上モジュールをクロスカットの分離を可能にすることによって、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を生成し、ブラウズサービス実行方法の前に見ることができます