Spring5 アノテーションでコンストラクタ

Spring5のアノテーションでコンストラクタを行うサンプルです。

目次

サンプル Spring5 アノテーションでコンストラクタを行う概要
  1.起動するファイル(MainController.java)
  2.設定ファイル(TestConfig.java)
  3.beanとして使用(ISyain,Syain,IHello,Hello)
  実行する
  pom.xml

Spring5 アノテーションでコンストラクタを行う概要

今回作成したファイルです。

処理の流れ

・MainController.javaが以下を行います。
・TestConfig.javaから対象のクラスをDIコンテナにbeanとして登録。
・context.getBeanでbean(インスタンス)を取得してコンストラクタを使用しメソッドを実行。

githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring5-annotation-construct

1.起動するファイル(MainController.java)

package com.example.test1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainController {
	public static void main(String[] args) {

		AnnotationConfigApplicationContext context = 
				new AnnotationConfigApplicationContext(TestConfig.class);

		ISyain syain = context.getBean(Syain.class);

		System.out.println(syain.getHello()); //Hello World!
		context.close();
	}
}

9行目は、TestConfig.javaを読み込みます。
11行目は、context.getBeanでbean(インスタンス)を取得しています。変数のデータ型はインターフェースです。

2.設定ファイル(TestConfig.java)

package com.example.test1;

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

@Configuration
@ComponentScan("com.example.test1")
public class TestConfig {
	
}

@Configurationは、設定クラスであることを示しています。
@ComponentScanは、対象のパッケージ配下にある@Componentが付与されたクラスを探してBeanとしてDIコンテナに登録します。

3.beanとして使用(ISyain,Syain,IHello,Hello)

ISyain.java

インターフェースです。

package com.example.test1;

public interface ISyain {
	public String getHello();
}

Syain.java

上記インターフェースを実装しています。

package com.example.test1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class Syain implements ISyain {

	private IHello hello1;

	@Autowired
	public Syain(IHello a) {
		this.hello1 = a;
	}
	@Override
	public String getHello() {
		return hello1.getHello();
	}
}

@Componentは、このクラスはBeanとしてDIコンテナに登録する対象であることを意味します。
12行目は、コンストラクタです。
生成されたインスタンスを9行目の変数にセットします。
11行目の@Autowiredはこの場合省略可能です。

コンストラクタで、複数クラスのどれかを判別する場合

	@Autowired
	public Syain(@Qualifier("hello") IHello a) {
		this.hello1 = a;
	}

コンストラクタの引数の先頭に@Qualifier("クラス名")を追加して区別します。
このときのクラス名の最初の文字は小文字にします。

IHello.java

インターフェースです。

package com.example.test1;

public interface IHello {
	public String getHello();
}

Hello.java

上記インターフェースを実装しています。

package com.example.test1;

import org.springframework.stereotype.Component;

@Component
public class Hello implements IHello {
	@Override
	public String getHello() {
		return "Hello World!";
	}
}

@Componentは、このクラスはBeanとしてDIコンテナに登録する対象であることを意味します。
メソッドは、文字列のHello Worldを返します。

実行する

MainController.javaを右クリックして「実行」→「Javaアプリケーション」をクリックするとコンソールにHello World!と表示されます。

pom.xml

	<dependencies>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-beans</artifactId>
	    <version>5.3.7</version>
	</dependency>
	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.3.7</version>
	</dependency>
</dependencies>

https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/overview-summary.html

関連の記事

Spring5 XMLでhello worldを表示
Spring5 XMLでコンストラクタを行う
Spring5 Java Configでhello world

△上に戻る