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

SpringMVC

Posted by arkgame