IoCとスプリングが提供するIoC容器
1. Inversion of Control or DI(Dependency Injection)
IoCまたはDIの基本概念は「制御権逆転」である.
一般的に、依存性を解決する方法は、自分が使う依存性を自分で創造し、使用することである.つまり、自分は依存性に対する制御権を持っている.
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
しかし、依存性に対する制御権は逆転し、依存性はあるものの、自ら創造したものではない.そのため、依存性に対する制御権は自分ではなく、外部にある.そのため、制御権が逆転したと言える.class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
// repo를 사용합니다.
}
上記の例では、所有者コントローラ以外に依存性を注入する人がいます.この例では、ジェネレータによって依存性が取得されます.したがって,依存独立性(DI)は独立制御(IOC)としても考えられる.2.スプリングが提供するIoCコンテナ(アプリケーションコンテキスト、BeanFactory)
フレームワークは制御逆転概念を応用する代表的な技術である.フレームワークは、予め作成されたブランクのセットや拡張可能な抽象ライブラリの準備だけではありません.ライブラリのアプリケーションコードを使用して、アプリケーションフローを直接制御します.
逆に、フレームワークは逆にアプリケーションコードを使用します.通常、開発したクラスをフレームワークに登録し、フレームワークがフローを主導する過程で開発者が作成するアプリケーションコードを使用する方法です.
スプリングIoCコンテナの主な機能は、「空の作成、編み込み、空の提供」(空の作成、空の注入の依存性、空のスキャンの管理)です.ここで、
빈(bean)
とはIoC 컨테이너가 관리하는 객체
である.すべてのオブジェクトがスプリングコンテナで管理されているわけではありません.空の登録は次の方法で行います.
- @Component
- @Repository
- @Service
- @Controller
- @Configuration
(@Componentメタ宣言付き注記付きオブジェクトを登録)
空の設定
では、どのようにして必要な依存性を得るのでしょうか.つまり、@Autowired/@Injectをどこに貼り付けますか?
また、スプリングIoC容器は「空」のみに依存して注入される.
1. ApplicationContext
ApplicationContext
はスプリングアプリケーション内の中央インタフェースであり、アプリケーションに구성 정보
を提供する.以下はSpring公式ドキュメントのApplicationContextが提供する機能です.
( https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html )
特に、ApplicationContextが提供する機能の1つとして、「セーフティファクトリ」という方法があります.つまり、ApplicationContextはBenFactoryを継承している.
2. BeanFactory
BeanFactory
は애플리케이션 컴포넌트의 중앙 저장소
であり、空構成ソースから空の定義を読み出し、構築し、空を提供する機能を有する.Springの公式ドキュメントを参照してください.BeanFactoryの役割について詳しく説明します.
SpringBeanコンテナにアクセスするためのルートインタフェース.
このインタフェースは、複数のbean定義を有するオブジェクトによって実現され、各オブジェクトは1つの文字列名によって一意に識別される.
빈 정의에 따라 팩토리는 포함된 객체의 독립 인스턴스 (Prototype 디자인 패턴) 또는 단일 공유 인스턴스 (인스턴스가 범위의 싱글톤인 Singleton 디자인 패턴의 우수한 대안)를 반환한다.
が返すインスタンスタイプはbeanファクトリ構成に依存する.Spring 2.0からは、Web環境の「要求」や「セッション」の範囲など、特定のアプリケーションコンテキストに応じて他の範囲を使用できます.通常、setterまたはジェネレータでアプリケーション・オブジェクトを構成する場合は、beanfactoryクエリーなどのpull構成フォーマットを使用するよりも、push構成(push構成)に依存することが望ましい.
Spring의 Dependency Injection 기능은 이 BeanFactory 인터페이스와 하위 인터페이스를 사용하여 구현된다.
この方法の要点は、アプリケーション・コンポーネントの構成(たとえば、単一のオブジェクトがプロパティ・ファイルを読み込む必要がなくなった)を一元化したBeanFactory가 애플리케이션 구성 요소의 중앙 레지스트리
です.通常、BeanFactoryは、XMLドキュメントなどの構成ソースに格納されているbean定義をロードして整理します.springframework.beansパッケージを使用してbeanを構成します.しかしながら、実装は、Javaコードから直接生成されたJavaオブジェクトを必要に応じて簡単に返すことができる.LDAP、RDBMS、XML、プロパティファイルなど、定義を格納する方法には制約はありません.サポートbean間の参照(注入依存関係)を実施することを提案する.
空工場の実施は、できるだけ標準
빈 라이프 사이클 인터페이스
をサポートしなければならない.初期化方法全体と標準手順は次のとおりです.空の工場ライフサイクルインタフェースと方法
( https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html )
リファレンス
Reference
この問題について(IoCとスプリングが提供するIoC容器), 我々は、より多くの情報をここで見つけました https://velog.io/@jsj3282/IoC-컨테이너와-ApplicationContext-BeanFactoryテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol