Springコア原理TIL(6)


[参考講座]金英漢のスプリングコア原理-基本編

💡 BeanFactoryとApplicationContext



✏️ BeanFactory

  • スプリングコンテナの最上位インタフェース.
  • スプリングシートの管理と照会を担当します.
  • GetBean()を提供します.
  • これまで、私たちが使用してきたほとんどの機能はBeanFactoryによって提供されています.
  • ✏️ ApplicationContext

  • BeanFactory機能はすべて継承され、提供されます.
  • BeanFactoryは、
  • 個の空の管理および検索機能を提供し、BeanFactoryを継承したApplicationContextは他のインタフェースも継承しており、多くの追加機能が必要です.

  • BeanFactoryを直接使う作業はほとんどありません.
    ApplicationContextを使用すると、より便利な追加機能が提供されます.
    BeanFactory、ApplicationContextはSpringコンテナと呼ばれています!😎

    スプリング空席の設定について

  • スプリングは、JavaクラスとXML設定を含む複数の設定フォーマットをサポートします.
  • の理由は、BenDefinitionという抽象画があるからです.
  • BenDefinitionは、空の構成メタデータ情報と呼ばれる.
  • スプリングコンテナは、このメタデータ情報に基づいてスプリングシートを生成する.
    SpringコンテナはJavaコードかXMLかを知る必要はなく、BeanDefinitionだけを知る必要があります🧐
  • まとめるとSpringは様々な形式の設定情報を提供しています(xml、java...)抽象的にBenDefinitionとして使用します.

    💡 たんトンコンテナ


    AppConfigは、以前に作成されたスプリングのない純粋なDIコンテナで、要求されるたびに新しいオブジェクトが作成されます.
    Webアプリケーションは、通常、複数のお客様が同時に要求します.
    これらのWebアプリケーションの特性では、
    既存のコードはリクエストに基づいてオブジェクトを再生成するため、大量のメモリが浪費されます.
    ソリューションは、オブジェクトを作成して共有するだけです.
    これがデザインモードの1つであるモノトーンモードです.

    ▼▼モノトーン柄


    これは、
  • クラスインスタンスのみが生成されることを保証する設計モードである.
  • Privateジェネレータを使用して外部呼び出しジェネレータをブロックする必要があります😎
  • testの場所に例を作成します.
    package hello.core.singleton;
    public class SingletonService {
    
          private static final SingletonService instance = new SingletonService();
    
          public static SingletonService getInstance() {
              return instance;
      }
      //생성자를 private으로 선언 
          private SingletonService() {
      }
          public void logic() { System.out.println("싱글톤 객체 로직 호출");
      } 
    }
  • 静的領域を使用してインスタンスオブジェクトを宣言します.
  • このオブジェクトは、共通として宣言されたメソッドgetInstance()でのみクエリーできます.共有が静的領域であるため、同じインスタンスが呼び出されます.
  • 宣言
  • ジェネレータはプライベートであり、外部からジェネレータを呼び出すことを阻止する
    ->オブジェクトインスタンスは1つだけ共有されます.
  • モノトーンモードを使用したテストコード

    @Test
    @DisplayName("싱글톤 패턴을 적용한 객체 사용")
    public void singletonServiceTest() {
    //private으로 생성자를 막아두었다. 컴파일 오류가 발생한다. 
    //new SingletonService();
    
    //1. 조회: 호출할 때 마다 같은 객체를 반환
    SingletonService singletonService1 = SingletonService.getInstance();
    //2. 조회: 호출할 때 마다 같은 객체를 반환
    SingletonService singletonService2 = SingletonService.getInstance();
    
    //참조값이 같은 것을 확인
    System.out.println("singletonService1 = " + singletonService1); System.out.println("singletonService2 = " + singletonService2);
          // singletonService1 == singletonService2
          assertThat(singletonService1).isSameAs(singletonService2);
    }
    呼び出すたびに同じインスタンスが返されます😊
    これにより,顧客の要求に応じてオブジェクトを生成する行為を防止できる.
    しかし、上記モノトーンモードでは、以下のような問題があった.

    ▼▼モノトーンの問題

  • 実装コード自体が多い
  • DIP違反.クライアントは特定のクラス
  • に依存するため
  • DIP違反、OCP違反の可能性が高い
  • 試験困難
  • 内部属性の変更または初期化が困難
  • プライベートジェネレータではサブクラス
  • を作成するのは難しい.
    したがって、
  • は柔軟性に欠ける
  • である.
    でも…!我々のスプリングは上述したモノトーンモードの問題を解決し,モノトーンモードを柔軟に管理する容器を有する.
    私たちが今まで学んだspringbinこそ、モノトーン管理のbinです.
    スプリングに使うモノトーンコンテナについて、次のTILで整理してみます.😎