Система управления сотрудниками Spring IoC

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь создавать систему управления сотрудниками с использованием контейнера Spring IoC (Inversion of Control). Цель - использовать контейнер Spring IoC для извлечения информации о сотрудниках из файла конфигурации и хранения ее в коллекции списка, из которой можно получать и печатать информацию о сотрудниках.

👀 Предварительный просмотр

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl getAllEmployees
INFO: Вход в метод getAllEmployees()
Сотрудники [employeeId=000001, employeeName=John Doe, employeeSex=Male, employeeBirthday=1993-11-06, employeeHiredate=2018-10-11, userId=1]
Сотрудники [employeeId=000021, employeeName=Jane Smith, employeeSex=Female, employeeBirthday=1990-07-16, employeeHiredate=2019-10-21, userId=4]
Сотрудники [employeeId=000022, employeeName=Alice Johnson, employeeSex=Female, employeeBirthday=1993-02-11, employeeHiredate=2019-12-27, userId=12]
Сотрудники [employeeId=000035, employeeName=Bob Brown, employeeSex=Male, employeeBirthday=1991-06-23, employeeHiredate=2020-05-06, userId=19]
Сотрудники [employeeId=000066, employeeName=Mary Taylor, employeeSex=Female, employeeBirthday=1997-12-21, employeeHiredate=2021-01-03, userId=20]
Запущено тестов: 1, Провалено: 0, Ошибок: 0, Пропущено: 0, Затрачено времени: 1,499 сек

🎯 Задачи

В этом проекте вы научитесь:

  • Как реализовать интерфейс IEmployeeService для обработки операций, связанных с сотрудниками
  • Как создать класс EmployeeServiceImpl для предоставления реализации интерфейса IEmployeeService
  • Как настроить контейнер Spring IoC для включения сканирования пакетов на основе аннотаций
  • Как реализовать метод test() для получения информации о сотрудниках из контейнера Spring IoC и печати ее

🏆 Достижения

После завершения этого проекта вы сможете:

  • Использовать контейнер Spring IoC для управления данными о сотрудниках
  • Реализовать интерфейсы сервисов и их реализации с использованием аннотаций
  • Конфигурировать контейнер Spring IoC с использованием XML-файла конфигурации
  • Получать и печатать информацию о сотрудниках из контейнера 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. Откройте файл IEmployeeService.java, расположенный в директории EmployeeSystemIoC/src/main/java/org/labex/service.

  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. Создайте новый файл под названием EmployeeServiceImpl.java в директории EmployeeSystemIoC/src/main/java/org/labex/service.

  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. Откройте файл applicationContext.xml, расположенный в директории EmployeeSystemIoC/src/main/resources.

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

    <!-- Добавьте здесь больше бинов сотрудников -->

</beans>
✨ Проверить решение и практиковаться

Реализация метода тестирования

В этом шаге вы научитесь реализовывать метод test() в файле TestEmployeeSystem.java.

  1. Откройте файл TestEmployeeSystem.java, расположенный в директории EmployeeSystemIoC/src/test/java/org/labex.

  2. Реализуйте метод test():

    • Создайте объект ClassPathXmlApplicationContext и загрузите файл applicationContext.xml.
    • Получите бин EmployeeServiceImpl из контейнера Spring IoC.
    • Получите бины сотрудников из контейнера Spring IoC и добавьте их в EmployeeServiceImpl с использованием метода addEmployee().
    • Распечатайте всю информацию о сотрудниках, вызвав метод getAllEmployees() для бена EmployeeServiceImpl.

Ваш файл 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

Вывод должен быть похож на следующий:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.labex.TestEmployeeSystem
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl addEmployee
INFO: Вход в метод addEmployee()
11 мая 2024 г., 2:28:53 утр. org.labex.service.EmployeeServiceImpl getAllEmployees
INFO: Вход в метод getAllEmployees()
Сотрудники [employeeId=000001, employeeName=John Doe, employeeSex=Male, employeeBirthday=1993-11-06, employeeHiredate=2018-10-11, userId=1]
Сотрудники [employeeId=000021, employeeName=Jane Smith, employeeSex=Female, employeeBirthday=1990-07-16, employeeHiredate=2019-10-21, userId=4]
Сотрудники [employeeId=000022, employeeName=Alice Johnson, employeeSex=Female, employeeBirthday=1993-02-11, employeeHiredate=2019-12-27, userId=12]
Сотрудники [employeeId=000035, employeeName=Bob Brown, employeeSex=Male, employeeBirthday=1991-06-23, employeeHiredate=2020-05-06, userId=19]
Сотрудники [employeeId=000066, employeeName=Mary Taylor, employeeSex=Female, employeeBirthday=1997-12-21, employeeHiredate=2021-01-03, userId=20]
Запущено тестов: 1, Провалено: 0, Ошибок: 0, Пропущено: 0, Затрачено времени: 1,499 сек

Результаты :

Запущено тестов: 1, Провалено: 0, Ошибок: 0, Пропущено: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.199 s
[INFO] Finished at: 2024-05-11T02:28:53Z
[INFO] ------------------------------------------------------------------------
✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.