スプリングIoC容器


IoC (Inversion of Control)


依存関係注入(DependecyInjection)とも呼ばれ、あるオブジェクトを直接作成して使用する依存オブジェクトではなく、注入されて使用する方法を指します.
  • を直接作成および使用
    private BookRepository bookRepository = new BookRepository();
  • IoCの作成者は
  • private BookRepository bookRepository;
    public BookService(BookRepository bookRepository){
    	this.bookRepository = bookRepository;
    }

    IoC容器


    管理
  • オブジェクトの作成とライフサイクル
  • は、様々な方法でbeanを作成し、bean間の依存性を編み、このようなbeanを提供する.
  • BeanFactory / ApplicationContext


    空工場(BeanFactory):IoCコンテナの最上位インタフェースは、空(bean)を管理するコンテナです.
  • BeanFactory:スプリングは、さまざまなライフサイクルを通じてさまざまな機能を提供します.ex) getBean()
  • ApplicationContext:BeanFactoryを継承し、BeanFactoryが所有するIoCコンテナの機能とともに追加機能を提供します.
  • DI(Dependency Injection)


  • 依存注入はbean間でのみ行われる.すなわちSpringIoCコンテナ内のオブジェクト間のみ依存注入を行う.
  • ApplicationContextを含むbeanは自己注入するため,直接使用することはほとんどない.
  • <例>

    public OwnerController(OwnerRepository Serviec, ApplicationContext applicationContext){
    	this.owners = Service;
    	this.applicationContext = applicationContext;
    }

    ApplicationContextを直接使用するコード

    @GetMapping("/bean")
    @ReponseBody
    public String bean(){
    	return "bean : " + applicationContext.getBean(OwnerController.class);
    }

    ApplicationContextを直接使用せずに同じ結果を出力するコード

    @GetMapping("/bean")
    @ReponseBody
    public String bean(){
    	return "bean : " + owners;
    }
    上記の例では、アプリケーション全体でオブジェクトが再利用されるため、同じ所有者オブジェクトのハッシュ値が出力されます.これらのインスタンスは、単音スキャンの空のインスタンスとして登録される.
    モノトーンでオブジェクトを作りたい場合、IoC容器を使うと便利です.IoCコンテナに何も説明せずに空に登録した場合、デフォルトではモノトーンのコロンとして登録されます.
    シングルトーンは常に同じオブジェクトを使用するため、メモリの面で非常に効果的であり、コンテナで作成したオブジェクトを実行時に使用すると、パフォーマンスの最適化に役立ちます.