JavaのAOP

1.AOP:縦横orientiedプログラミングアスペクト指向プログラミング。これは、横方向にプログラミングされます。

2.指向プログラミングは、元のコードを変更しない場合に新たな機能を追加します。

3. 2つのアプリケーションでプログラムされたばね部に配向します:

  a)の宣言的トランザクション

  b)のカスタムプログラミングAOP

4.springは、関連する概念のAOPとAPIを提供します。

セクション(アスペクト):モジュラー懸念、複数のオブジェクトを横断するこの懸念。

接続点(ジョインポイント):春AOP、参加時点で特定の点におけるプログラム実行中は常にメソッドの実行を表します。

通知(アドバイス):アクションは、接続ポイントの特定のセクションについて行わ。

エントリポイント(ポイントカット):アサーションの接続点に一致します。

聴衆(ターゲットオブジェクト):一つ以上の態様、オブジェクトが通知されます。

AOPプロキシ(AOPプロキシ):AOP剤または薬剤はCGLIB JDK動的プロキシであってもよいです。

(ウィービング)織り:他のアプリケーション・タイプまたはオブジェクトと側面を、そして通知するオブジェクトを作成します。

通知の種類

  アドバイスの前にa)の事前通知():アドバイス)が参加ポイントの前に実行されるが、それは例外をスローしない限り、この通知の前に(実行フローの接続ポイントを停止することはできません。

  B)アドバイスを戻した後、通知後():通知は、接続点の正常終了後に行われる;例えば、正常な戻りを例外をスローすることなく方法。

  アドバイスを投げた後、C)例外通知():例外がメソッドで終了(正常または例外リターンかどうか)をスローしたときのアドバイスが実行されます。

  D)アドバイスアラウンド通知を(周囲):接続点通知メソッド呼び出しを囲みます。

6.スプリングは、AOPのAPIの開発を提供しました

  a)に新しいJavaプロジェクト

  B)のjarパッケージを導入

aopalliance.jar

aspectjweaver.jar

コモンズ-logging.jar

春-AOP-4.1.6.RELEASE.jar

春-側面-4.1.6.RELEASE.jar

春豆-4.1.6.RELEASE.jar

春・コンテキスト4.1.6.RELEASE.jar

春・コア - 4.1.6.RELEASE.jar

春-表現-4.1.6.RELEASE.jar

春-TX-4.1.6.RELEASE.jar

  関連クラスのc)の準備

LogAdvice.java

/ ** 
 * 
 *一般的なビジネスを達成するためにログ、ばねによって提供事前通知実装する
 * / 
パブリック クラスを LogAdvice 実装MethodBeforeAdvice { 

    @Override 
    公共 ボイド前(メソッド、メソッド、オブジェクト[]引数、オブジェクトターゲット)がスローされたThrowableを{ 
        System.out.println(target.getClass()getSimpleName() + ":" + method.getName()+ "メソッドが実行されました" ); 
    } 

}

UserServiceImpl.java

/ ** 
 *サービスのアプローチは、多くの場合、いくつかの共通の特徴を持って、
 トランザクションログ、アクセス権、キャッシュなど:*など
 * 
 * / 
パブリック クラス UserServiceImpl 実装UserServiceの{ 
    @Override 
    公共 無効{)(追加
        のSystem.outを。 println( "ADD" ); 
    } 
    @Override 
    公共 ボイド削除(){ 
        System.out.printlnは( "削除" ); 
    } 
    @Override 
    公共 ボイド更新(){ 
        System.out.printlnは( "更新" ); 
    } 
}

  d)の設定ファイルを書きます

<豆のxmlns = "http://www.springframework.org/schema/beans" 
    のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
    のxmlns:P = "のhttp:// WWW .springframework.org /スキーマ/ P」
    のxmlns:C = "http://www.springframework.org/schema/c" 
    の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/aop 
        のhttp:/ / www.springframework.org/schema/aop/spring-aop.xsd "> 
    <!- これは、公共サービスであります - >
    <豆上記のid = "logAdvice" クラス = "cn.sxt.aop.LogAdvice" /> 
    <! - これが本物のオブジェクトである - > 
    <豆上記ID = "UserServiceの" クラス =「cn.sxt.service.impl.UserServiceImpl 「/> 
   <! - リンクされ、公共サービスと実物の春AOPの設定を使用し  
           、このアクションは、動的プロキシ、春動的プロキシで完了する必要が前に
           良いパッケージ、および構成のみを指定することによって行われる必要があります
     - > 
    <AOP:config>の
        <AOP: "(。。* * * cn.sxt.service.impl(..))の実行は" =ポイントカット表現ID = "ポイントカット" /> 
        <AOP:アドバイス-REF =顧問「logAdvice "= REF-ポイントカット"ポイントカット「/> 
    </ AOP:設定> 
</豆>

  e)のテスト

パブリック クラスAopTest { 
    @Test 
    公共 ボイドtestBeforeAdvice(){ 
        ApplicationContextのAC = 新しい ClassPathXmlApplicationContext( "beans.xmlの" )。
        私たちUserServiceの =(UserServiceの)ac.getBean( "UserServiceの" ); 
        us.add(); 
    } 
}

7.スプリングは、非侵襲的な実施AOPを提供します

コード通知

/ ** 
 * 
 *達成共通ログサービス
 * / 
パブリック クラスLogAdvice {
     公共 ボイドログ(){ 
        System.out.printlnは( "----- ----ログ情報" ); 
    } 
}

コンフィギュレーション

<豆のxmlns = "http://www.springframework.org/schema/beans" 
    のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
    のxmlns:P = "のhttp:// WWW .springframework.org /スキーマ/ P」
    のxmlns:C = "http://www.springframework.org/schema/c" 
    の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/aop 
        のhttp:/ / www.springframework.org/schema/aop/spring-aop.xsd "> 
    <!- これは、公共サービスであります - > 
    <豆ID = "logAdvice" クラス = "cn.sxt.aop.LogAdvice" /> 
    <! -これが本物のオブジェクトである- > 
    上記のid = "UserServiceの"言及したの<bean クラス = "cn.sxt.service.impl.UserServiceImplを" /> 
   <! - 公共サービスと実際のオブジェクトの使用スプリングAOPの設定リンク
           このアクションは、動的プロキシに完了する必要があり、春動的プロキシの前に
           良いパッケージ、および構成のみを指定することによって行われる必要があります
     - >
    <AOP:設定> 
        <AOP: "(。* * * cn.sxt.service.impl(..))実行"ポイントカット式はID = "ポイントカット" / => 
        <AOP:アスペクトREF = "logAdvice"> 
            < ! -あらかじめ設定された通知- > 
            <AOP:メソッドは=ポイントカット-REF = "ポイントカットを" "ログ"の前に/> 
        </ AOP:アスペクト></ AOP:config>の  
</豆>
   

注釈によって達成8 AOP

お知らせ

/ ** 
 * 
 *共通ログサービスを実現
 * / 
@Aspect 
パブリック クラスLogAdvice {
     @Before "実行(cn.sxt.service.impl *。*。*(..))" 公共 ボイドログ(){ 
        System.out.println( "----- ----ログ情報" ); 
    } 
}

設定、自動設定

<豆のxmlns = "http://www.springframework.org/schema/beans" 
    のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 
    のxmlns:P = "のhttp:// WWW .springframework.org /スキーマ/ P」
    のxmlns:C = "http://www.springframework.org/schema/c" 
    の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/aop 
        のhttp:/ / www.springframework.org/schema/aop/spring-aop.xsd "> 
    <!- これは、公共サービスであります - > 
    <豆ID = "logAdvice" クラス= "cn.sxt.aop.LogAdvice" /> 
    <! -これが本物のオブジェクトである- > 
    <豆上記ID = "UserServiceの" クラス = "cn.sxt.service.impl.UserServiceImpl" /> 
      <! - 使用AOPを実現するためのアノテーション - >
       <AOP:AspectJの-自動プロキシ/> 
</豆>

 

おすすめ

転載: www.cnblogs.com/Vincent-yuan/p/11267582.html