@Configuration @BeanでSpringコンテナにBeanを登録して、依存性注入する方法


この記事では、
SpringコンテナにBeanを登録して、依存性注入する方法について、紹介します。

@Configurationと@Beanを使用して、SpringコンテナにBeanを登録します。
(設定は、XMLファイルではなく、Javaベース)

動作環境


・Windows10 64bit

・Eclipse 2018-12(Eclipse 4.10)

・Java 8

・Spring Boot 2.1.3(Spring Tool Suite 4)

※下記の記事で構築した開発環境を利用(注:今回、Spring Boot プロジェクトは「Web」を使用します

Spring Tool Suite 4の開発環境構築(Eclipseにインストール)|STS4

@Beanとは

@Beanを利用して、Springコンテナで管理されるBeanを生成します。

@Configurationクラス内のメソッドに@Beanを付与して、@Beanメソッドを宣言します。@Beanメソッドで、Beanのインスタンスを生成して、これを戻り値として返すと、このインスタンスがSpringコンテナに登録されます。

Springコンテナで管理されているBeanは、任意のクラスで@Autowiredまたは@Injectを付与したフィールドに代入することができます。

* 通常、@Beanは、@Configurationクラス内のメソッドに付与します。

* @Beanの属性は、Spring XMLスキーマの<bean/>要素と同様のものです。

@Configurationとは

通常、@Beanメソッドを宣言するクラスには@Configurationを付与します。

@Configurationクラスは、実行時に、Bean定義、サービス要求の生成のために、Springコンテナによって処理されます。

@Configurationには、メタアノテーションと@Componentが付与されています。そのため、@Configurationクラスは、コンポーネントスキャンの対象となり、@Componentのように@Autowired/@Injectを利用することもできます。

SpringコンテナにBeanを登録して、依存性注入

Springコンテナに登録するBean

Beanクラス

DemoBean.java

・ソースコード
package com.example.demo;

public class DemoBean {
    
    public String getHelloDemoBean() {
        
        return "Hello DemoBean!";
    }
}
getHelloDemoBeanメソッド

パラメータ
    なし

戻り値
    文字列(Hello DemoBean!)

設定ファイル(Javaベース)

・@Configurationクラス

DemoConfig.java

* DemoConfigクラスに@Configurationを付与

・ソースコード
package com.example.demo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DemoConfig {
    
    @Bean
    public DemoBean getDemoBean() {
        return new DemoBean();
    }
}

getDemoBeanメソッドに@Beanを付与して、@Beanメソッドを宣言します。

getDemoBeanメソッド(@Beanメソッド)

パラメータ
    なし

戻り値
    Springコンテナに登録するインスタンス(DemoBean)

DemoBeanのインスタンスを生成して返します。DemoBeanのインスタンスがSpringコンテナに登録されます。

コントローラ(Controller)

・コントローラクラス

DemoController.java

・ソースコード
package com.example.demo;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.beans.factory.annotation.Autowired;

@RestController
public class DemoController {
    
    @Autowired
    private DemoBean demoBean;
    
    @GetMapping("/")
    public String index() {
        return demoBean.getHelloDemoBean();
    }
}

フィールドdemoBean

@Autowiredを付与して、Springコンテナで管理されているBean(DemoBeanのインスタンス)をフィールドdemoBeanに代入します。

indexメソッド

パラメータ
    なし

戻り値
    画面に表示する文字列

ブラウザで「http://localhost:8080/」にアクセスすると、このメソッドが実行されます。

DemoBeanクラスのgetHelloDemoBeanメソッドの実行結果(文字列「Hello DemoBean!」)を返し、この文字列が画面に表示されます。

アノテーションについて

@RestController:コントローラクラスに付与するアノテーション

@GetMapping:メソッドとGETリクエストURLを紐付けるアノテーション

動作確認

「demo」を右クリックして、「実行」>「Spring Boot App」を選択します。



Spring Boot アプリケーション起動後、ブラウザで「http://localhost:8080/」にアクセスすると、画面に「Hello DemoBean!」が表示されます。

DemoBeanクラスのインスタンスがSpringコンテナに登録され、依存性注入ができていることが確認できます。



スポンサーリンク

0 件のコメント :

コメントを投稿