Spring IoC による従業員管理システム

JavaBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、Spring IoC(制御の逆転)コンテナを使用して従業員管理システムを構築する方法を学びます。目的は、Spring IoC コンテナを使用して構成ファイルから従業員情報を抽出し、リストコレクションに保存し、そこから従業員情報を取得して表示することです。

👀 プレビュー

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl getAllEmployees
INFO: Entering getAllEmployees() method
Employees [employeeId=000001, employeeName=John Doe, employeeSex=Male, employeeBirthday=1993-11-06, employeeHiredate=2018-10-11, userId=1]
Employees [employeeId=000021, employeeName=Jane Smith, employeeSex=Female, employeeBirthday=1990-07-16, employeeHiredate=2019-10-21, userId=4]
Employees [employeeId=000022, employeeName=Alice Johnson, employeeSex=Female, employeeBirthday=1993-02-11, employeeHiredate=2019-12-27, userId=12]
Employees [employeeId=000035, employeeName=Bob Brown, employeeSex=Male, employeeBirthday=1991-06-23, employeeHiredate=2020-05-06, userId=19]
Employees [employeeId=000066, employeeName=Mary Taylor, employeeSex=Female, employeeBirthday=1997-12-21, employeeHiredate=2021-01-03, userId=20]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.499 sec

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 従業員関連の操作を処理するために IEmployeeService インターフェイスを実装する方法
  • IEmployeeService インターフェイスの実装を提供するための EmployeeServiceImpl クラスを作成する方法
  • アノテーションベースのパッケージスキャニングを有効にするための Spring IoC コンテナを構成する方法
  • Spring IoC コンテナから従業員情報を取得して表示するための test() メソッドを実装する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • Spring IoC コンテナを使用して従業員データを管理する
  • アノテーションを使用してサービスインターフェイスとその実装を実装する
  • XML 構成ファイルを使用して Spring IoC コンテナを構成する
  • Spring IoC コンテナから従業員情報を取得して表示する

IEmployeeService インターフェイスを実装する

このステップでは、IEmployeeService インターフェイスを実装する方法を学びます。以下の手順に従ってこのステップを完了します。

  1. EmployeeSystemIoC/src/main/java/org/labex/service ディレクトリにある IEmployeeService.java ファイルを開きます。

  2. IEmployeeService インターフェイスに 2 つのメソッドを宣言します。

    • addEmployee:このメソッドは Employee オブジェクトをパラメータとして受け取り、ブール値を返します。これは、従業員オブジェクトをリストに追加するために使用されます。
    • getAllEmployees:このメソッドにはパラメータがなく、List を返します。これは、すべての従業員情報を取得するために使用されます。

あなたの IEmployeeService.java ファイルはこのようになるはずです。

package org.labex.service;

import org.labex.pojo.Employee;

import java.util.List;

public interface IEmployeeService {
    boolean addEmployee(Employee employee);

    List<Employee> getAllEmployees();
}

EmployeeServiceImpl クラスを実装する

このステップでは、IEmployeeService インターフェイスの実装である EmployeeServiceImpl クラスを実装する方法を学びます。

  1. EmployeeSystemIoC/src/main/java/org/labex/service ディレクトリに EmployeeServiceImpl.java という新しいファイルを作成します。

  2. EmployeeServiceImpl クラスを実装し、IEmployeeService インターフェイスを実装させます。

  3. EmployeeServiceImpl クラスに @Service アノテーションを付けます。

  4. 静的な List コレクションをグローバルに宣言し、引数のないコンストラクタでコレクションオブジェクトを割り当てます。

  5. addEmployee()getAllEmployees() メソッドを実装します。

    • addEmployee() メソッドでは、logger.info() メソッドを使用して実行プロセスをログに記録します。
    • getAllEmployees() メソッドでは、logger.info() メソッドを使用して実行プロセスをログに記録します。

あなたの EmployeeServiceImpl.java ファイルはこのようになるはずです。

package org.labex.service;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.labex.pojo.Employee;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class EmployeeServiceImpl implements IEmployeeService {

    private static List<Employee> employees;

    private static final Log logger  = LogFactory.getLog(EmployeeServiceImpl.class);

    public EmployeeServiceImpl() {
        employees = new ArrayList<>();
    }

    @Override
    public boolean addEmployee(Employee employee) {
        logger.info("Entering addEmployee() method");
        return employees.add(employee);
    }

    @Override
    public List<Employee> getAllEmployees() {
        logger.info("Entering getAllEmployees() method");
        return employees;
    }
}

Spring IoC コンテナを構成する

このステップでは、アノテーションベースのパッケージスキャニングを有効にするために Spring IoC コンテナを構成する方法を学びます。

  1. EmployeeSystemIoC/src/main/resources ディレクトリにある applicationContext.xml ファイルを開きます。

  2. <beans> 要素に以下の XML 名前空間宣言を追加します。

    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd"
    
  3. <context:component-scan> 要素を追加して、org.labex パッケージに対するアノテーションベースのパッケージスキャニングを有効にします。

あなたの 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:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       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">

    <!-- アノテーションによるコンポーネントのスキャンを有効にする -->
    <context:component-scan base-package="org.labex"/>

    <!-- 従業員情報 -->
    <bean id="emp1" class="org.labex.pojo.Employee"
          c:employeeId="000001" c:employeeName="John Doe" c:employeeSex="Male"
          c:employeeBirthday="1993-11-06" c:employeeHiredate="2018-10-11" c:userId="1"/>

    <bean id="emp2" class="org.labex.pojo.Employee"
          c:employeeId="000021" c:employeeName="Jane Smith" c:employeeSex="Female"
          c:employeeBirthday="1990-07-16" c:employeeHiredate="2019-10-21" c:userId="4"/>

    <!-- ここにさらに従業員のビーンを追加します -->

</beans>

テスト メソッドを実装する

このステップでは、TestEmployeeSystem.java ファイルの test() メソッドを実装する方法を学びます。

  1. EmployeeSystemIoC/src/test/java/org/labex ディレクトリにある TestEmployeeSystem.java ファイルを開きます。

  2. test() メソッドを実装します。

    • ClassPathXmlApplicationContext オブジェクトを作成し、applicationContext.xml ファイルを読み込みます。
    • Spring IoC コンテナから EmployeeServiceImpl ビーンを取得します。
    • Spring IoC コンテナから従業員のビーンを取得し、addEmployee() メソッドを使用して EmployeeServiceImpl に追加します。
    • EmployeeServiceImpl ビーンの getAllEmployees() メソッドを呼び出して、すべての従業員情報を表示します。

あなたの TestEmployeeSystem.java ファイルはこのようになるはずです。

package org.labex;

import org.junit.Test;
import org.labex.pojo.Employee;
import org.labex.service.EmployeeServiceImpl;
import org.labex.service.IEmployeeService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestEmployeeSystem {

    @Test
    public void test(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IEmployeeService employeeService = context.getBean(EmployeeServiceImpl.class);

        // コンテキストから従業員のビーンを取得する
        Employee emp1 = (Employee) context.getBean("emp1");
        employeeService.addEmployee(emp1);
        Employee emp2 = (Employee) context.getBean("emp2");
        employeeService.addEmployee(emp2);
        // ここにさらに従業員のビーンを追加する

        // 従業員情報を表示する
        for (Employee e : employeeService.getAllEmployees()) {
            System.out.println(e.toString());
        }
    }
}

これで、Spring IoC 従業員管理システムの実装が完了しました。アプリケーションの機能を確認するには、test() メソッドを実行します。

  1. テストを実行する:
cd ~/project/EmployeeSystemIoC/
mvn test

出力は以下に似たものになるはずです。



y 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee
INFO: Entering addEmployee() method
May 11, 2024 2:28:53 AM org.labex.service.EmployeeServiceImpl addEmployee

まとめ

おめでとうございます!このプロジェクトを完了しました。実力を向上させるために、LabEx でさらに多くの実験を行って練習してください。

✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習✨ 解答を確認して練習