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 アノテーションでhello world