春の豆のライフサイクルと春のデザインパターン

春のBeanのライフサイクル

  • 開始から春の豆の完全なライフサイクルの最終破壊豆春のコンテナまで、春のコンテナを作成します
    ここに画像を挿入説明
  1. SpringコンテナBean定義はXMLファイルから読み込み、ビーンをインスタンス化します。
  2. 春はビーンの定義に従ってすべての属性を記入してください。
  3. BeanのインタフェースBeanNameAwareを実装している場合、春には、BeanのID setBeanNameメソッドに渡されました。
  4. 豆はBeanFactoryAwareインタフェースを実装する場合、春はsetBeanFactoryメソッドに渡されたBeanFactoryを。
  5. あなたは豆に関連するすべてのBeanPostProcessorsを持っている場合は、春はpostProcesserBeforeInitialization()メソッド内でそれらを呼び出します。
  6. 豆の実装IntializingBean場合は、afterPropertySetメソッドを呼び出すと、宣言した豆の初期化方法ならば、この初期化メソッドを呼び出します。
  7. そこBeanPostProcessorsと関連豆場合は、BeanのpostProcessAfterInitialization()メソッドが呼び出されます。
  8. BeanがDisposableBeanを実装している場合、それは破壊()メソッドを呼び出します。

注:二つの重要な豆ライフサイクル・アプローチがありますが、最初のものは、ときBeanコンテナの負荷に呼び出されるセットアップ()、です。第二の方法は、容器がクラスアンロードされるときに呼び出されるティアダウン()です。豆のタグには、2つの重要な属性のinitメソッドおよびdestroyメソッドを持っています。あなたは自分自身の初期化とログアウト方法をカスタマイズするためにそれらを使用することができます。彼らはまた、対応するノート@PostConstructと@PreDestroyを持っています。


様々なメソッド呼び出し施さBeanの完全なライフサイクルは、これらの方法は、次のカテゴリに分けることができます。

  1. Beanの独自のメソッド:このメソッドは、ビーン自体、コール設定ファイルのinitメソッドで指定されたメソッドおよびdestroyメソッドを含んでいます
  2. 豆クラスライフサイクル・インターフェース方法:この方法はBeanNameAware、BeanFactoryAware、InitializingBeanとDiposableBeanこれらのインタフェースを含みます
  3. 方法インタフェースコンテナレベルのライフサイクル:これはInstantiationAwareBeanPostProcessorとBeanPostProcessorインターフェースの両方を含む、一般のためのそれらの実装クラスと言った「ポストプロセッサ」。
  4. 工場プロセッサインターフェース方法の後:これはAspectJWeavingEnabler、ConfigurationClassPostProcessor、CustomAutowireConfigurer法などの非常に有用な植物インターフェースポストプロセッサ上を含みます。プロセッサの後、工場出荷時の容器です。アプリケーションコンテキストは、設定ファイルを組み立てた直後に呼び出します。

春のデザインパターン

1.プロキシモード
  • スプリング二プロキシモード、ターゲットオブジェクト実装する場合インターフェイスの数、スプリングJDK使用java.lang.reflect.Proxyのプロキシクラス、ターゲットオブジェクトは、任意のインターフェースを実装しないサブクラスの場合、ターゲット・オブジェクトを使用して生成スプリングCGLIBライブラリ。
  • 実装:AOPの下には、動的プロキシモードです。
    • ダイナミックエージェント:手動でプロキシクラスを記述することなく、メモリ内のビルド、
    • 静的プロキシ:手動でプロキシクラスを記述する必要は、プロキシクラス参照がプロキシオブジェクトです。
  • 原則:
    • セクションでは、一度に実行されているアプリケーションの中に織り込まれています。通常の状況下では、製織部が、AOP容器が動的に作成されたときに対象オブジェクトとしてプロキシオブジェクトを作成します。このようにSpringAOPファセットに織り込まれています。
  • ウィービング:セクションでは、ターゲットオブジェクトに適用され、プロセスの新しいプロキシオブジェクトを作成します。
例2.シングルモード
  • 春はデフォルトのコンフィギュレーションファイルの豆シングルトンで定義されています。
  • (レイジーINIT実施形態を含む)スプリング依存性注入は、で発生AbstractBeanFactory getBean内部の。doGetBean方法のgetBeanはgetSingletonがBeanを作成し呼び出します。

分析getSingleton()メソッド

public Object getSingleton(String beanName){
    //参数true设置标识允许早期依赖
    return getSingleton(beanName,true);
}
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
    //检查缓存中是否存在实例
    Object singletonObject = this.singletonObjects.get(beanName);
    if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
        //如果为空,则锁定全局变量并进行处理。
        synchronized (this.singletonObjects) {
            //如果此bean正在加载,则不处理
            singletonObject = this.earlySingletonObjects.get(beanName);
            if (singletonObject == null && allowEarlyReference) {  
                //当某些方法需要提前初始化的时候则会调用addSingleFactory 方法将对应的ObjectFactory初始化策略存储在singletonFactories
                ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);
                if (singletonFactory != null) {
                    //调用预先设定的getObject方法
                    singletonObject = singletonFactory.getObject();
                    //记录在缓存中,earlysingletonObjects和singletonFactories互斥
                    this.earlySingletonObjects.put(beanName, singletonObject);
                    this.singletonFactories.remove(beanName);
                }
            }
        }
    }
    return (singletonObject != NULL_OBJECT ? singletonObject : null);
}

3. Template Methodパターン
  • 問題を解決するためのコードを繰り返します。たとえば、次のようにRestTemplate、JmsTemplate、JpaTemplate。
  • クラシックテンプレートメソッドの定義:
    • 親クラスは、ボビン(と順番にメソッド呼び出し)を定義し、特定のサブクラスのメソッドは、によって実現されます
    • 最大の利点:コードの再利用は、コードの重複を減らします。メソッド呼び出しの順序で方法を実施するための特定のサブクラス、および他の方法に加えて、親クラスに予め書き込まれています。
    • だから、メソッドの親テンプレート方式の2種類があります。
      • 一般的なアプローチ:すべてのサブクラスは、コードで使用されます
      • 別の方法:方法の2種類に分かれてカバーされるサブクラス:
        • 抽象メソッド:抽象親クラスのメソッド、サブクラスは、オーバーライドする必要があります
        • フックメソッド:親クラスが空のメソッドで、デフォルトの継承サブクラスは空です
        • 注:それはフックと呼ばれてなぜ、このフックは、実際に親クラス(ヌル法)であるので、サブクラスは、このフック(メソッド)、親コントロールを使用することができます!
  • 春Template Methodパターンエッセンス:テンプレートメソッドパターンとコールバックモードの組み合わせは、テンプレートメソッドは、別の実装を継承する必要はありませんです。ほとんどすべての春の外部拡張のは、このモデルを採用しています。
4.フロントエンドコントローラモード
  • Srpingは要求を配布するのDispatcherServletを提供します。
ヘルプビュー(ビューヘルパー)
  • 春は、分散コードビューの統合を支援するための効率的なマクロをJSPタグのセットを提供します。
6.依存性注入
  • たBeanFactory / ApplicationContextの全体を通じてコアコンセプトインターフェース。
7.ファクトリパターン
  • ファクトリモードでは、我々はあなたがオブジェクトを作成し、新しく作成されたオブジェクトを指すように共通のインターフェースを使用してたときに論理を作成するには、クライアントを公開しません。春たBeanFactoryは、オブジェクトのインスタンスを作成するために使用されます。
  • 実装:FactoryBeanのインタフェース。
  • 原則:豆FactoryBeanのインタフェースを達成するためには、工場と呼ばれる豆の種類です。春、ことを特徴としているあなたはどちらgetBean()を使用してBeanを呼び出すときに、Beanが自動的のgetObject()メソッドため、戻りビーンファクトリではありませんが、このbean.getOjbect戻り値()メソッドを呼び出します取得します。

参考記事:

  • https://www.cnblogs.com/zrtqsk/p/3735273.html
  • https://blog.csdn.net/caoxiaohong1005/article/details/80039656

より多くのあなたが知っている、より多くのあなたは知りません。
手術をせずに適切な方法は、患者はまだ手術を終了し、手術する方法はありません、求めることができます。
あなたが他の質問がある場合は、ウェルカムメッセージ、我々は、議論一緒に学び、一緒に進行することができます

彼は193元の記事を発表 ウォンの賞賛116 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_40722827/article/details/104981967