Spring入門IOCとAOP学習ノート

5530 ワード

Spring入門IOCとAOP学習ノート
1.概要
Springフレームの芯は2つあります.
  • Spring容器はスーパー大工場として、Javaオブジェクトのすべてを管理し、作成します.これらのJavaオブジェクトはBeanと呼ばれています.
  • Spring容器管理容器におけるBen間の依存関係は、「注入依存」という方法を用いて、bean間の依存関係を管理する.
  • Springには、2つのコアインターフェースがあります.BeanFactoryApplicationContextと、ApplicationContextのサブインターフェースです.これらは、Spring容器を表すことができます.Spring容器はBeanのインスタンスを生成する工場であり、容器中のBeanを管理します.優先的にApplication Contectを使用することを提案します.メモリに非常に重要なアプリケーションがない限り、BenFactoryを使用することを考慮します.AplicationConteextを作成すると、デフォルトはSingleton Beanを初期化します.これは事前にAppleication Conteetを作成する時に大きな性能オーバーヘッドがありますが、Appleication Conteetを初期化したら、プログラムの後でsingleton Beanのインスタンスを取得すると、より良い性能があります.BeanFactory要素にを指定すると、Singleton beanは初期化されません.
    2.IOC
    Inversion Of Controlは、反転を制御し、依存注入とも呼ばれる.AオブジェクトがBオブジェクトを呼び出す方法を必要とする場合、この場合を依存と呼び、即ちAオブジェクトがBオブジェクトに依存する.依存注入を用いて,ビーンオブジェクトに通常の属性値を注入するだけでなく,他のビーン参照を注入することもできる.この依存注入によって,Java EE応用における種々のコンポーネントはハードコードで結合する必要がなく,工場モードを使用する必要さえない.あるJavaのインスタンスが他のJavaのインスタンスを必要とする場合、システムは、プログラムの明示的な取得なしに必要なインスタンスを自動的に提供する.
    利益
    まず、伝統的なjava使用例の不足について説明します.
  • は、newキーワードによって一つのオブジェクトを具体化する.
  • 工場モードを通じて一例のオブジェクトを生産する.
  • 第一の方法は必然的に使用者と依存対象にハードコード結合があり、プロジェクトのアップグレードの維持に非常に不利である.第二のものは第一のものよりずっといいですが、コンポーネントを呼び出すには、工場を通じて依存されたオブジェクトを積極的に取得する必要があります.これは、依頼された工場との結合を呼び起こしてくれます.
    では、IOCはどんなメリットがありますか?
    调节者は、依頼されたオブジェクトを自発的に取得する必要がなく、Spring容器が调节者であることを受动的に受け入れるメンバー変数であればよい.総じて能動的に受動的になることから、制御反転と呼ばれる.
    シーン
    依存注入は主に以下の2つがあります.
  • 値注入:IoC容器は、メンバ変数のsetter方法を用いて、依存対象を注入する.
  • 注入構造:IoC容器はコンストラクタを通して依存対象に注入される.
  • 値注入を主とし、注入を補助とする注入戦略を構築することを提案します.依存関係に変化のない注入は構造注入をできるだけ採用する.他の依存関係の注入は,設定値注入を採用することを考慮した.
    IoC容器を使う3つの基本的なポイント:
  • アプリケーションの各コンポーネントはインターフェースに向かってプログラミングされ、このようにコンポーネント間の結合関係をインターフェースレベルに高めることができ、プロジェクトの後期の発展に有利になる.
  • アプリケーションの各コンポーネントは、プログラムによってアクティブに作成されず、Springコンテナによって生成され初期化される.
  • Springは構成ファイルまたは注釈を用いてBeaビンの実現クラス、依存関係を管理し、Spring容器は構成ファイルまたは注釈に従って反射によってインスタンスを作成し、注入依存関係を作成する.
  • 3.AOP
    Asppect Oriented Prograammingは、モジュール化のためのクロスカットの注目点として、面に向かってプログラミングされています.AOPとOOP(Object Oriented Programming)は互いに補足されており、オブジェクト指向プログラミングは静的な角度からプログラム構造を縦方向に考え、断面プログラミングは動的な角度から横方向に運行過程を考えるということが理解できる.例えば日記記録の機能は、コードがすべてのオブジェクトに水平に散らばりがちで、散布されたオブジェクトの核心機能とは関係がない.このような各オブジェクトに散布された無関係コードは「横断コード」と呼ばれ、OOPの設計において、大量のコードの重複が生じ、各モジュールの多重化に不利になる.
    簡単に言えば、ブロックはいくつかのプロセスをブロックすることができ、一つの方法が実行されると、Spring AOPは一つの方法の実行をブロックすることができ、この方法が実行される前にいくつかの機能を追加します.は、典型的なプロキシモードのアプリケーションです.
    AOPの中のいくつか用語
  • うどん(Asppect):うどん組織の複数のAdvice、Adviceをうどんに置いて定義します.
  • 接続点(JoinPoint):プログラム実行中に明確な点、例えば方法の呼び出し、または異常な抛り出しは、Spring AOPにおいて、接続点は常に方法の呼び出しである.
  • エンハンスメント処理(Advice):AOPフレームは特定のエントリポイントで実行されるエンハンスメント処理であり、「before」、「after」、「after-returning」、「around」、「after-throwing」などが処理されている.
  • 切り込みポイント(Pointcut):拡張処理の接続点を挿すことができる.ある接続点が指定された要求を満たすと、この接続点は、追加された強調処理(Advice)を行い、この接続点は、切り込み点となる.
  • 1つのbeanの構成を例にとって:
    
            
            
                
                
                
            
        
    
    lazy-init="true"タグが接頭面であり、このラベルの下のは、これらが補強処理であるとしたら、どこで補強処理が行われますか?属性は、切り込みポイント、すなわちどこで補強処理を行うかを定義する.ここでの表現は、例えばpointcutという意味です.
  • comp.wangjun.aop.xmlの中で任意の種類の方法を指定します.
  • 最初の*は戻り値が制限されないことを表し、第二の*はクラス名が制限されないことを表します.
  • 番目の*は、方法名に制限がないことを表し、括弧の中の(.)は、任意の数、種類の無制限の変形を表しています.
  • いくつかの用語があります.
  • は、処理されたクラスに方法またはフィールドを追加するために導入される.Springは、新しいインターフェースを任意の処理対象に導入することができます.例えば、どのオブジェクトもisModifyインターフェースを実現するために導入することができます.
  • ターゲット:AOPフレーム強化処理されたオブジェクト.もしAOPが動的AOPで実現されるなら、その対象は代理された対象です.
  • AOPエージェント:AOPフレームで作成されたオブジェクトは、cglibエージェントであっても良いし、エージェントはスタックのターゲットの強化である.
  • を織り込む(Weaving):拡張処理を対象オブジェクトに追加し、強化されたオブジェクトを作成するプロセスが織り込まれる.Springは他の純粋なjavaAOPフレームと同じで、運転中に織り込みが完了します.
  • 使用シーン
    ログ記録、監査、声明事務、安全性、キャッシュなど.
    AsppectJとSpring AOPの違い
    ちょうどAOPを実現する二つの方式を表しています.
    AsppectJは静的にAOPを実現するもので、つまりコンパイル段階でプログラムを修正するには、特殊なコンパイラが必要で、より良い性能があります.
    Spring AOPはAOPを動的に実現するものであり、即ち運行段階においてAOPエージェントを動的に生成し、純粋なjavaが実現するので、特別なコンパイラは必要ないが、通常は性能が劣る.
    SpringはすでにAsppectJを集積しています.
    Spring AOPを実現する方式
  • は、注釈の「ゼロ構成」方式に基づいて、@Asppect、@Pointcutなどの注釈を使って、切り込み点と強調処理を表示する.
  • XMLプロファイルの管理方式に基づいて、Springプロファイルを使用して、切り込みポイントと強調処理を定義する.
  • Spring AOPのダイナミックエージェント
    ダイナミックエージェントとは、AOPフレームがバイトコードを修正することなくメモリに一時的に方法としてAOPオブジェクトを生成するというもので、このAOPオブジェクトにはターゲットオブジェクトのすべての方法が含まれており、特定の接点で補強処理を行い、元のオブジェクトを元に戻す方法である.
    Spring AOPにおける動的エージェントは主に2つの方法があり、JDKダイナミックエージェントとCGLOIBダイナミックエージェントがあります.JDK動的エージェントは、反射によってプロキシされたクラスを受信し、プロキシが要求されるクラスは、インターフェースを実装しなければならない.JDK動的エージェントのコアはexecution(* com.wangjun.aop.xml.*.*(..))インターフェースおよびInvocationHandlerクラスである.
    ターゲットクラスがインターフェースを実現していない場合、Spring AOPはCGLOIBを使用してターゲットクラスを動的に代理することを選択します.CGLOIB(Code Generation Library)は、コード生成のクラスであり、実行時にある種類のサブクラスを動的に生成することができます.CGLOIBは継承方式による動的エージェントですので、あるクラスがProxyと表記されていると、CGLOIBを動的エージェントとして使用することができません.
    4.学習経路
  • AOPとIOCのデモを構築する.
  • springツールセットSTSをインストールします.
  • 注釈なしでAOPを行う.
  • xml構成でAOPを行う.