Springコア原理TIL(6)
[参考講座]金英漢のスプリングコア原理-基本編
スプリングコンテナの最上位インタフェース. スプリングシートの管理と照会を担当します. GetBean()を提供します. これまで、私たちが使用してきたほとんどの機能はBeanFactoryによって提供されています. 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の場所に例を作成します.静的領域を使用してインスタンスオブジェクトを宣言します. このオブジェクトは、共通として宣言されたメソッドgetInstance()でのみクエリーできます.共有が静的領域であるため、同じインスタンスが呼び出されます. 宣言ジェネレータはプライベートであり、外部からジェネレータを呼び出すことを阻止する
->オブジェクトインスタンスは1つだけ共有されます.
これにより,顧客の要求に応じてオブジェクトを生成する行為を防止できる.
しかし、上記モノトーンモードでは、以下のような問題があった.
実装コード自体が多い DIP違反.クライアントは特定のクラス に依存するため DIP違反、OCP違反の可能性が高い 試験困難 内部属性の変更または初期化が困難 プライベートジェネレータではサブクラス を作成するのは難しい.
したがって、は柔軟性に欠ける である.
でも…!我々のスプリングは上述したモノトーンモードの問題を解決し,モノトーンモードを柔軟に管理する容器を有する.
私たちが今まで学んだspringbinこそ、モノトーン管理のbinです.
スプリングに使うモノトーンコンテナについて、次のTILで整理してみます.😎
💡 BeanFactoryとApplicationContext
✏️ BeanFactory
✏️ ApplicationContext
BeanFactoryを直接使う作業はほとんどありません.
ApplicationContextを使用すると、より便利な追加機能が提供されます.
BeanFactory、ApplicationContextはSpringコンテナと呼ばれています!😎
スプリング空席の設定について
SpringコンテナはJavaコードかXMLかを知る必要はなく、BeanDefinitionだけを知る必要があります🧐
💡 たんトンコンテナ
AppConfigは、以前に作成されたスプリングのない純粋なDIコンテナで、要求されるたびに新しいオブジェクトが作成されます.
Webアプリケーションは、通常、複数のお客様が同時に要求します.
これらのWebアプリケーションの特性では、
既存のコードはリクエストに基づいてオブジェクトを再生成するため、大量のメモリが浪費されます.
ソリューションは、オブジェクトを作成して共有するだけです.
これがデザインモードの1つであるモノトーンモードです.
▼▼モノトーン柄
これは、
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("싱글톤 객체 로직 호출");
}
}
->オブジェクトインスタンスは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);
}
呼び出すたびに同じインスタンスが返されます😊これにより,顧客の要求に応じてオブジェクトを生成する行為を防止できる.
しかし、上記モノトーンモードでは、以下のような問題があった.
▼▼モノトーンの問題
したがって、
でも…!我々のスプリングは上述したモノトーンモードの問題を解決し,モノトーンモードを柔軟に管理する容器を有する.
私たちが今まで学んだspringbinこそ、モノトーン管理のbinです.
スプリングに使うモノトーンコンテナについて、次のTILで整理してみます.😎
Reference
この問題について(Springコア原理TIL(6)), 我々は、より多くの情報をここで見つけました https://velog.io/@yulhee741/Spring-핵심-원리-6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol