Spring 5.3で@Configurationと@ComponentScanを使ってコンストラクタを行う
環境
Spring 5.3.16
Eclipse 2019-12
JavaSE 1.8
書式
@ComponentScan(“com.arkgame.study")
@ComponentScanは、対象のパッケージ配下にある@Componentが付与されたクラスを探してBeanとしてDIコンテナに登録します
1.pom.xmlの配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.arkgame.springconstuct</groupId> <artifactId>springcontract</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.16</version> </dependency> </dependencies> </project>
2.Userクラスの定義
package com.arkgame.study; import org.springframework.stereotype.Component; //このクラスはBeanとちてDIコンテナに登録 @Component public class User { // 名前 public String getUsername() { String strName = "山田 太郎"; return strName; } // 年齢 public int getAge() { int age = 35; return age; } }
3.UserService クラスの定義(Beanとして使用)
package com.arkgame.study; import org.springframework.stereotype.Component; //アノテーション@Componentを追加 @Component public class UserService { // Userクラスのインスタンス変数の宣言 private final User user; //UserServiceのコンストラクタ public UserService(User user) { this.user = user; } public String getUser() { return user.getUsername(); } public int getAge() { return user.getAge(); } }
4.@Configurationで設定クラスを指定
package com.arkgame.study; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; //BeanとしてDIコンテナに登録 @Configuration @ComponentScan("com.arkgame.study") public class UserConfig { }
5.動作実行ファイル
package com.arkgame.study; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class UserApp { public static void main(String[] args) { // AnnotationConfigApplicationContext変数宣言 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(UserConfig.class); // DIコンテナからbean(インスタンス)を取得 UserService userService = context.getBean(UserService.class); System.out.println("名前: " + userService.getUser()); System.out.println("年齢: " + userService.getAge()); context.close(); } }
6.実行結果
名前: 山田 太郎
年齢: 35