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

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

目次

サンプル 環境
  1.MainController.java
  2.TestConfig.java
  3.ISyain.java
  4.Syain.java
  5.IHello
  6.Hello
  pom.xml

環境

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

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

1.MainController.java

package com.example.demo;

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.demo;

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

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

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

3.ISyain.java

インターフェースです。

package com.example.demo;

public interface ISyain {
	public String getHello();
}

4.Syain.java

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

package com.example.demo;

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("クラス名")を追加して区別します。
このときのクラス名の最初の文字は小文字にします。

5.IHello

インターフェースです。

package com.example.demo;

public interface IHello {
	public String getHello();
}

6.Hello

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

package com.example.demo;

import org.springframework.stereotype.Component;

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

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

pom.xml

上記で使用したpom.xmlの依存の部分です。

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>5.2.9.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.2.9.RELEASE</version>
		</dependency>
	</dependencies>

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

関連の記事

Spring5 XMLでhello worldを表示
Spring5 XMLでコンストラクタを行う
Spring5 アノテーションでコンストラクタ

△上に戻る