..
今の側面を作成する方法を見てみましょう。
まず最初に、例が我々のポイントカットを作成するインターフェイスを作成します。
パブリックインターフェイスMyInterface {
公共ボイドF1();
公共int型F2();
公共のint f3は()例外をスローします。
公共ボイドF4は、()例外をスローします。
公共int型F5();
}
ポイントカットを書き込むには、知っている必要がありますAspectJのポイントカット指定子を 、私たちの例で我々は、ジョインポイントの実行メソッドを一致する場合のみ実行を使用します。
実行(修飾子 - パターン?RET型パターン型パターンを宣言?名前パターン(パラメータ-パターン)スローパターン?)ここで:
まず、私たち自身の面を作成する必要があります。
@アスペクト
{publicクラスMyAspect
.............
}
我々が見るようにクラスに@アスペクトとアノテーションが付記されています。
あなたがAOP nell'applicationContext XMLのサポートを有効にする必要があるので、これだけでは十分ではありません。
< - !AspectJをENBLING - > <aop:aspectj-autoproxy /> < - !MYASPECT - > <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
一度メソッドF1(アドバイス前)の実行前に実行されるアクションは、例えば、これらの2つの操作がアドバイスを作成する準備が行われている。
@の前に("実行(* it.mrwebmaster.aop.MyInterface.f1 (..))")
公共ボイドbeforeF1(){
system.out.printlnを("F1 BEFORE");
}
コードからわかるように、我々は、ポイントカットを識別する値として式を受け付ける注釈の前に@を使用していました。
この例では、式はその修飾子、戻り値の型と入力パラメータでインタフェースit.mrwebmaster.aop.MyInterface F1 indipendetementeと呼ばれているすべてのメソッドに一致します。
同様に我々は、正しくアノテーション@はAfterReturningを使用して(アドバイスを返した後)メソッドがその実行を完了したときに実行するアドバイスを使用することができます。
@(ポイントカットをAfterReturning ="実行(* it.mrwebmaster.aop.MyInterface.f2 (..))",返す="RETVAL")
公共ボイドafterReturningF2(オブジェクトRETVAL){
system.out.printlnを("RETURN F2"+ RETVAL);
}
このレコードは、ポイントカットに加えて、オブジェクトに与えられた名前は、アドヴァイタの入力パラメータとして与えることができるメソッドによって返される、次のパラメータを取ります。
この場合、ポイントカットの表現は、メソッド、この場合は、F2の名前を除いてinviarataです。
@(ポイントカットをAfterThrowing ="実行(* it.mrwebmaster.aop.MyInterface.f3 (..))",投げる="スロー可能オブジェクト")
公共ボイドafterThrowingF3(スロー可能オブジェクトのThrowable){
system.out.printlnを(+スロー可能オブジェクトを"F3はスロー");
}
違いは、メソッドはオブジェクトが例外を返さないことです。
アドバイスのもう一つのタイプは常にメソッドの後に実行され、それは時間は通常、または例外を(アドバイス後)をスローします。 このアドバイスは、後に@を使用して実装されています:
@の後("実行(* it.mrwebmaster.aop.MyInterface.f4 (..))")
公共ボイドafterF4(){
system.out.printlnを("AFTER F4");
}
最後に我々はaroundアドバイス"を行う方法を参照してください。
@アラウンド("実行(* it.mrwebmaster.aop.MyInterface.f5 (..))")
公共ボイドaroundF5(ProceedingJoinPoint PJP){
system.out.printlnを("F5 BEFORE");
してみてください{
オブジェクトRETVAL =)(pjp.proceed;
system.out.printlnを("RETURN F5キー"+ RETVAL);
する} catch(Throwableの電子){
system.out.printlnを("F5はスロー"+電子);
}
}
我々はポイントカット式のコードからわかるように、他のアドバイスとは異なるものです。
どのような変更を明示的にクラスProceedingJoinPoint進むか、そのアプリケーションの入力として渡される一つのメソッドを介してメソッドの実行を呼び出す必要があります同じアドバイスです。
このインタフェースは、メソッドのパラメータ、戻り値の型とメソッドが実行されているオブジェクトに関する情報を取得するために進んで他のメソッドを使用しても用意されています。
それはどんな深い読者に委ねられている。
私たちにできること私たちのアドバイスをテストするには、インターフェイスMyInterfaceの単純な実装を書き込み、および主要なテストを作成することです。
MyInterfaceImpl {publicクラスがMyInterfaceを実装
@オーバーライド
公共ボイドF1(){
system.out.printlnを("F1");
}
@オーバーライド
公共int型F2(){
system.out.printlnを("F2");
0を返します。
}
@オーバーライド
公共のint f3は(){例外がスローされます
system.out.printlnを("F3");
新しい例外を("例外F3")をスローします。
}
@オーバーライド
公共ボイドF4キー(){例外をスローします。
system.out.printlnを("F4");
}
@オーバーライド
公共int型F5(){
system.out.printlnを("F5");
0を返します。
}
}
。nell'applicationContext XML:
<! - ターゲット:オブジェクト - > <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />主な試験:
パブリッククラスメイン{
公共の静的な無効メイン(文字列[] args){
/ **
* Instanz IoCコンテナ
* /
ApplicationContextのApplicationContextのClassPathXmlApplicationContext =新しい("applicationContext.xmlを");
MyInterface MyInterface =(MyInterface)applicationContext.getBean("myInterfaceImpl");
myInterface.f1();
system.out.printlnを("########## \ nを");
myInterface.f2();
system.out.printlnを("########## \ nを");
してみてください{
myInterface.f3();
します} catch(Exception e)の{}
system.out.printlnを("########## \ nを");
してみてください{
myInterface.f4();
します} catch(Exception e)の{}
system.out.printlnを("########## \ nを");
myInterface.f5();
system.out.printlnを("########## \ nを");
}
}
| |
Linuxの(コース)
オープンソースシステムへの完全なガイド。 49€から。 |
| |
PHP(コース)
動的なWebサイトを作成するためのフルコース。 49€から。 |
| |
RubyとRuby on Rails(コース)
RubyとRoRのと、ソフトウェアやWebアプリケーションを作成します。 39€から。 |