Spring 5.3.16でアノテーション@Componentを使ってクラスのコンストラクタを実行する
環境
Spring 5.3.16
Eclipse 2019-12
JavaSE 1.8
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.applicationContext.xml設定ファイル
場所:src/main/java/applicationContext.xml
設定内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--component-scanは指定した配下の対象 -->
<context:component-scan base-package="com.arkgame.study" />
</beans>
3.Userクラスの定義
package com.arkgame.study;
import org.springframework.stereotype.Component;
@Component
public class User {
// 名前
public String getUsername() {
String strName = "山田 一郎";
return strName;
}
// 年齢
public int getAge() {
int age = 32;
return age;
}
}
4.UserServiceクラスの定義
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();
}
}
5.動作実行ァイル(UserApp.java)
package com.arkgame.study;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserApp {
// 配置ファイル名
private static final String FILENAME = "applicationContext.xml";
public static void main(String[] args) {
// applicationContext.xmlを読み込み
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(FILENAME);
// DIコンテナからbean(インスタンス)を取得
UserService userService = context.getBean(UserService.class);
System.out.println("名前: " + userService.getUser());
System.out.println("年齢: " + userService.getAge());
context.close();
}
}
6.実行結果
名前: 山田 一郎 年齢: 32