Spring IoC 员工管理系统

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本项目中,你将学习如何使用 Spring IoC(控制反转)容器构建一个员工管理系统。目标是使用 Spring IoC 容器从配置文件中提取员工信息,并将其存储在列表集合中,从中可以检索并打印员工信息。

👀 预览

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl getAllEmployees
信息: 进入getAllEmployees()方法
员工 [员工ID=000001, 员工姓名=John Doe, 员工性别=男, 员工生日=1993-11-06, 员工入职日期=2018-10-11, 用户ID=1]
员工 [员工ID=000021, 员工姓名=Jane Smith, 员工性别=女, 员工生日=1990-07-16, 员工入职日期=2019-10-21, 用户ID=4]
员工 [员工ID=000022, 员工姓名=Alice Johnson, 员工性别=女, 员工生日=1993-02-11, 员工入职日期=2019-12-27, 用户ID=12]
员工 [员工ID=000035, 员工姓名=Bob Brown, 员工性别=男, 员工生日=1991-06-23, 员工入职日期=2020-05-06, 用户ID=19]
员工 [员工ID=000066, 员工姓名=Mary Taylor, 员工性别=女, 员工生日=1997-12-21, 员工入职日期=2021-01-03, 用户ID=20]
运行的测试: 1, 失败: 0, 错误: 0, 跳过: 0, 耗时: 1.499秒

🎯 任务

在本项目中,你将学习:

  • 如何实现 IEmployeeService 接口以处理与员工相关的操作
  • 如何创建 EmployeeServiceImpl 类以提供 IEmployeeService 接口的实现
  • 如何配置 Spring IoC 容器以启用基于注解的包扫描
  • 如何实现 test() 方法以从 Spring IoC 容器中检索员工信息并打印

🏆 成果

完成本项目后,你将能够:

  • 使用 Spring IoC 容器管理员工数据
  • 使用注解实现服务接口及其实现
  • 使用 XML 配置文件配置 Spring IoC 容器
  • 从 Spring IoC 容器中检索并打印员工信息

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java/DataStructuresGroup -.-> java/collections_methods("`Collections Methods`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("`OOP`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("`Interface`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/annotation("`Annotation`") subgraph Lab Skills java/collections_methods -.-> lab-300400{{"`Spring IoC 员工管理系统`"}} java/classes_objects -.-> lab-300400{{"`Spring IoC 员工管理系统`"}} java/oop -.-> lab-300400{{"`Spring IoC 员工管理系统`"}} java/interface -.-> lab-300400{{"`Spring IoC 员工管理系统`"}} java/annotation -.-> lab-300400{{"`Spring IoC 员工管理系统`"}} end

实现 IEmployeeService 接口

在这一步中,你将学习如何实现 IEmployeeService 接口。请按照以下步骤完成此步骤:

  1. 打开位于 EmployeeSystemIoC/src/main/java/org/labex/service 目录下的 IEmployeeService.java 文件。

  2. IEmployeeService 接口中声明两个方法:

    • 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 类

在这一步中,你将学习如何实现 EmployeeServiceImpl 类,它是 IEmployeeService 接口的实现。

  1. EmployeeSystemIoC/src/main/java/org/labex/service 目录下创建一个名为 EmployeeServiceImpl.java 的新文件。

  2. 实现 EmployeeServiceImpl 类,并使其实现 IEmployeeService 接口。

  3. 使用 @Service 注解对 EmployeeServiceImpl 类进行标注。

  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. 将以下 XML 命名空间声明添加到 <beans> 元素中:

    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"/>

    <!-- 在此处添加更多员工 bean -->

</beans>
✨ 查看解决方案并练习

实现测试方法

在这一步中,你将学习如何在 TestEmployeeSystem.java 文件中实现 test() 方法。

  1. 打开位于 EmployeeSystemIoC/src/test/java/org/labex 目录下的 TestEmployeeSystem.java 文件。

  2. 实现 test() 方法:

    • 创建一个 ClassPathXmlApplicationContext 对象并加载 applicationContext.xml 文件。
    • 从 Spring IoC 容器中获取 EmployeeServiceImpl bean。
    • 从 Spring IoC 容器中获取员工 bean,并使用 addEmployee() 方法将它们添加到 EmployeeServiceImpl 中。
    • 通过调用 EmployeeServiceImpl bean 的 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);

        // 从上下文中获取员工 bean
        Employee emp1 = (Employee) context.getBean("emp1");
        employeeService.addEmployee(emp1);
        Employee emp2 = (Employee) context.getBean("emp2");
        employeeService.addEmployee(emp2);
        // 在此处添加更多员工 bean

        // 打印员工信息
        for (Employee e : employeeService.getAllEmployees()) {
            System.out.println(e.toString());
        }
    }
}

现在,你已经完成了 Spring IoC 员工管理系统的实现。你可以运行 test() 方法来验证应用程序的功能。

  1. 运行测试:
cd ~/project/EmployeeSystemIoC/
mvn test

输出应类似于以下内容:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl addEmployee
信息: 进入addEmployee()方法
2024年5月11日 上午2:28:53 org.labex.service.EmployeeServiceImpl getAllEmployees
信息: 进入getAllEmployees()方法
员工 [员工ID=000001, 员工姓名=John Doe, 员工性别=男, 员工生日=1993-11-06, 员工入职日期=2018-10-11, 用户ID=1]
员工 [员工ID=000021, 员工姓名=Jane Smith, 员工性别=女, 员工生日=1990-07-16, 员工入职日期=2019-10-21, 用户ID=4]
员工 [员工ID=000022, 员工姓名=Alice Johnson, 员工性别=女, 员工生日=1993-02-11, 员工入职日期=2019-12-27, 用户ID=12]
员工 [员工ID=000035, 员工姓名=Bob Brown, 员工性别=男, 员工生日=1991-06-23, 员工入职日期=2020-05-06, 用户ID=19]
员工 [员工ID=000066, 员工姓名=Mary Taylor, 员工性别=女, 员工生日=1997-12-21, 员工入职日期=2021-01-03, 用户ID=20]
运行的测试: 1, 失败: 0, 错误: 0, 跳过: 0, 耗时: 1.499秒

结果 :

运行的测试: 1, 失败: 0, 错误: 0, 跳过: 0

[信息] ------------------------------------------------------------------------
[信息] 构建成功
[信息] ------------------------------------------------------------------------
[信息] 总耗时:  6.199 秒
[信息] 完成时间: 2024-05-11T02:28:53Z
[信息] ------------------------------------------------------------------------
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。

您可能感兴趣的其他 Java 教程