Spring IoC/DI容器

4071 ワード

🙋‍♀️コンテナとは?


コンテナ管理インスタンスのライフサイクル.
生成されたインスタンスに追加の機能を提供します.
例えば、サーブレットを実行するWASは、サーブレットコンテナを有すると称する.
開発者はすでにサーブレットクラスをうまく完成させているが,実際にメモリにアップロードして実行しているのはWASが所有するサーブレットコンテナである.サーブレットコンテナは、同じサーブレットに対応するリクエストを受信すると、メモリにアップロードされていない既存のホームページ上のサーブレットを実行し、結果をWebブラウザに渡します.
コンテナはSpringのコアです.containerは開発者を代表してbeanを作成、管理、削除します.Containerがbeanを管理する場合、開発者はモジュール間の依存性と結合の問題から解放されます.したがって,開発者はAnnotationを残すだけで,開発者が望む場合にコードを実行することができる.
@Controller
public class HomeController {
    
    @GetMapping("/")
    public String home(){
        return "home";
    }
}
コンテナは露出しない.runメソッドを呼び出すコードの例を見てみましょう.
@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args);
	}

}
開発者はrunメソッドを呼び出すことはありませんが、containerはrunメソッドを自動的に呼び出します.
通常、モジュール間のインタラクションは、方法によって実現される.
このように,containerが開発者の代わりにメソッドを呼び出す場合,メソッドに必要なリソースの設計構造をInversion of Control(IOC)と呼ぶ.IOCはメソッドに必要なリソースをコード実行時間に渡すことを依存注入と呼ぶ.

🤪IoC (Inversion Of Control)


IoC(Inversion of Control)はわが国では「制御の逆転」と呼ばれている.他の多くのプロフェッショナルとは異なり、プログラムライフサイクルの主導権がWebアプリケーションコンテナにあるため、制御の逆転モードはJava Web開発で特に人気があります.たとえば、ゲームエンジンを作成するときに、初期化、実行、終了などのアプリケーションのフロー制御セクションを直接作成できます.また、実行にはメインループ(mainloop)が含まれ、プログラムが終了する前に高速実行で動作する.
しかしJavaベースのWebプログラムを開発するとブラウザにnaverを入力します.comを入力すると、DNSサーバを介してURLがサーバに渡され、doGet、doPostなどのメソッドが呼び出され、パラメータが付きます.この場合、処理ファイルまたはデータベースのクラスをインスタンス管理し、バッチインスタンス管理のためにオブジェクトの作成を管理するツールが必要です.この意味で,設計モードの原則には依存関係逆転の原則がある.
依存関係逆転の原則には2つの内容が含まれている.
  • 高忠実モジュールは、低忠実モジュールに依存するのではなく、すべてインタフェースに依存しなければならない.
  • 抽象化は詳細に依存できない.詳細は抽象
  • に依存する
    簡単に言えば,インタフェースを用いて結合度を低減することである.ただし,Javaではインタフェースを用いてもオブジェクトの作成に必要なコードが伴うため,結合を完全に分離することはできない.最終的に、プログラムを正常に動作させるために、プログラムはインスタンス化可能なコードに依存します.この問題を解決する方法は依存注入(DI,Dependency Injection)である.
    依存性注入は、クラスまたはインタフェースを使用するために行わなければならない行為であり、例えば、高速道路の料金所を通過する際には、駐車して手を伸ばして通行権を引き出さなければならない.自動車で高速道路を走ることができるが、高速道路を走るために通行権を抽出する行為に依存している.しかし,高速チャネル端末を搭載した車両は,高速チャネル端末が依存性を注入するので,依存性に必要な行為を必要とせずに通過できる.このように考えると,なぜオブジェクトを用いて注入インタフェース注入などの表現を作成しないのか,依存注入(DI)という用語を用いるのかが容易に理解できる.最近では,制御逆転(IoC)という語の意味が広く一般的であり,制御逆転よりも依存注入を用いることが多い.