スプリングコア原理2章


前章では,スプリングフレームを用いてOCPとDIPを満たす.しかし、以前作成したAppConfigもOCPとDIPを満たすコンテナ役を忠実に演じていた.2章では,スプリングの使用の利点と管理方法について述べた.

スプリングの適用



既存のAppConfigクラスに@Configurationと@Beanを追加するだけでSpringBinに登録して使用できます.スプリングコンテナから必要なオブジェクト、ApplicationContextを見つけることができます.getBean()メソッドで見つけることができます.
では、このように貼って使うと、以前作ったコードと何のメリットと違いがありますか?疑問が生じる.
もちろん、スプリングは、configurationを手動で登録する方式と比較して、主に素子走査による自動依存注入方式を用いる.
スプリングを使用する利点については、将来説明する.

スプリングコンテナを作成するには

ApplicationContext ac =new AnnotationConfigApplicationContext(AppConfig.class);
ApplicationContextをSpringコンテナと呼びます.AnnotationConfigApplicationContextは、ApplicationContextインタフェースのインプリメンテーションであり、インプリメンテーションで作成したAppConfigをパラメータに渡す.

コンテナに登録されている空のクエリー


  • すべての空の出力
    1.ac.getBenDefinitionNames():スプリングに登録されているすべての空をクエリーします.
    2.ac.getBean():空のオブジェクトをクエリーします.

  • アプリケーションの空の出力
    スプリング内部に使用するスペースはgetRole()で区切ることができます.
    空の名前.ROLE APPLICATIONは、通常、ユーザ定義のVINである.

  • クエリー・タイプには同じタイプがあります.
    クエリー・タイプが同じ場合は、エラーが発生します.
    ac.getBeansOfType()は、このタイプのすべての空をクエリーできます.
  • BeanFactoryとApplicationContext


    BeanFactoryはSpringコンテナのトップレベルのインタフェースです.
    スプリングシートの管理と照会を担当します.getBean()などの方法を提供します.
    ApplicationContextは、すべてのBenFactory機能を継承し、提供します.ApplicationContextは、BenFactory以外のさまざまなインタフェースを継承し、さまざまな機能を提供します.

    bean設定メタデータについて


    スプリング容器は、様々な形態の設定情報を受信できるように設計されている.
    ex) java, xml, groovy,...
    スプリングはBeanDefinitionの情報のみを利用しており、JavaロビンをデザインしてもXMLをデザインしても仕様通りにデザインすればいいので、BeanDefinitionを見ればいいのです.

    たんトンコンテナ


    スプリングを使用する最大の原因は、いつも1トンのコンテナを維持していることです.
    以前作成したAppConfigを純Javaとして実行しましょう
    memberServiceの作成new memberRepositoryでオブジェクトを作成し、orderServiceを作成new memberRepositoryでオブジェクトを作成します.
    Webアプリケーションとして扱うと、ユーザーの要求に応じて新しいオブジェクトが作成されます.
    したがって、1回だけオブジェクトを作成し、単一のトーンモードを使用して共有するように設計する必要があります.

    モノトーンモード


    シングルトーンモードは、クラスのインスタンスが1つしか生成されないことを保証する設計モードです.したがって、privateによる複数のオブジェクトの作成を防止する必要があります.
    public class SingletonService {
     private static final SingletonService instance = new SingletonService();
     public static SingletonService getInstance() {
     return instance;
     }
     private SingletonService() {
     }
     public void logic() {
     System.out.println("싱글톤 객체 로직 호출");
     }
    }
    モノトーンオブジェクトを静的に宣言し、プライベートジェネレータとして宣言することで、外部ジェネレータによるオブジェクトの生成が阻止されます.
    このようなモノトーンモードの問題は、クライアントがまず特定のクラスに依存することである.また、様々なモノトーンモードの問題もあります.

    単トンコンテナの利点


    モノクロコンテナは、モノトーンモードを適用する必要がなく、オブジェクトインスタンスをモノトーン管理できます.スプリングコンテナは、これらの単色調コンテナを使用することによって、単一トーンモードの乱雑なコードを記述することなく、DIP、OCP、privateなどの問題を解決することができる.

    単トンコンテナ設計注意事項


    モノクロコンテナは、最終的にはオブジェクトを作成し、オブジェクトを管理する方法であり、そのオブジェクトは保持状態として作成できません.
    クライアントが依存フィールドまたはクライアントによって値を変更する方法では、その後どこでどのような内容が変更されたのか、できるだけ読み取り専用の方法を使用する必要があります.