Введение
В этом проекте вы научитесь создавать систему управления сотрудниками с использованием контейнера 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
Реализовать интерфейс IEmployeeService
В этом шаге вы научитесь реализовывать интерфейс IEmployeeService. Следуйте шагам ниже, чтобы выполнить этот шаг:
Откройте файл
IEmployeeService.java, расположенный в директорииEmployeeSystemIoC/src/main/java/org/labex/service.Объявите два метода в интерфейсе
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.
Создайте новый файл под названием
EmployeeServiceImpl.javaв директорииEmployeeSystemIoC/src/main/java/org/labex/service.Реализуйте класс
EmployeeServiceImplи заставьте его реализовывать интерфейсIEmployeeService.Аннотируйте класс
EmployeeServiceImplаннотацией@Service.Объявите статическую коллекцию
Listглобально и назначьте ей объект коллекции в конструкторе без параметров.Реализуйте методы
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 для включения сканирования пакетов на основе аннотаций.
Откройте файл
applicationContext.xml, расположенный в директорииEmployeeSystemIoC/src/main/resources.Добавьте следующие объявления пространств имен 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"Добавьте элемент
<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.
Откройте файл
TestEmployeeSystem.java, расположенный в директорииEmployeeSystemIoC/src/test/java/org/labex.Реализуйте метод
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(), чтобы проверить функциональность приложения.
- Запустите тест:
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()
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



