Переключение китайско-английской информации с использованием IoC

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

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

Введение

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

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

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.056 s - in com.labex.TestGreeting
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.295 s
[INFO] Finished at: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------

🎯 Задачи

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

  • Создавать интерфейс IMessage с абстрактным методом doMessage()
  • Реализовывать интерфейс IMessage в двух конкретных классах: MessageCN и MessageEN
  • Конфигурировать биты сообщений с использованием файла applicationContext.xml
  • Тестировать функцию переключения сообщений в классе TestGreeting

🏆 Достижения

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

  • Использовать паттерн проектирования IoC для отделения реализации функциональности сообщений от основной программы
  • Использовать фреймворк Spring для настройки и управления битами сообщений
  • Писать юнит-тесты для проверки функциональности системы переключения сообщений

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/ProgrammingTechniquesGroup(["Programming Techniques"]) java/ProgrammingTechniquesGroup -.-> java/method_overriding("Method Overriding") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/oop("OOP") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/interface("Interface") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/annotation("Annotation") java/SystemandDataProcessingGroup -.-> java/xml_dom4j("XML/Dom4j") subgraph Lab Skills java/method_overriding -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/classes_objects -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/oop -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/encapsulation -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/interface -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/annotation -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} java/xml_dom4j -.-> lab-300348{{"Переключение китайско-английской информации с использованием IoC"}} end

Создайте интерфейс IMessage

В этом шаге вы создадите интерфейс IMessage, который содержит абстрактный метод doMessage(), не возвращающий значение.

  1. Создайте новый Java-файл с именем IMessage.java в пакете com.labex.
  2. Внутри файла определите интерфейс IMessage с помощью следующего кода:
package com.labex;

// Interface for message functionality
public interface IMessage {
    // Method signature for displaying a message
    void doMessage();
}

Данный интерфейс определяет базовую структуру для любого класса, который хочет реализовать функциональность сообщений. Метод doMessage() является абстрактным методом, который будет реализован конкретными классами сообщений.

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

Создайте класс MessageCN

В этом шаге вы создадите класс MessageCN, который реализует интерфейс IMessage. Этот класс будет иметь атрибут msg и методы get/set. Он также переопределит метод doMessage(), чтобы вывести строку "你好,Labex".

  1. Создайте новый Java-файл с именем MessageCN.java в пакете com.labex.
  2. Внутри файла определите класс MessageCN с помощью следующего кода:
package com.labex;

// Implementation of the IMessage interface for Chinese messages
public class MessageCN implements IMessage {
    private String msg; // Переменная для хранения сообщения

    // Getter method for retrieving the message
    public String getMsg() {
        return msg;
    }

    // Setter method for setting the message
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // Implementation of the doMessage method from the IMessage interface
    @Override
    public void doMessage() {
        // Print a greeting message in Chinese
        System.out.println("你好, " + msg);
    }
}

Класс MessageCN реализует интерфейс IMessage и предоставляет реализацию для метода doMessage(), который выводит приветственное сообщение на китайском языке.

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

Создайте класс MessageEN

В этом шаге вы создадите класс MessageEN, который также реализует интерфейс IMessage. Этот класс будет иметь атрибут msg и методы get/set. Он также переопределит метод doMessage(), чтобы вывести строку "hello,Labex".

  1. Создайте новый Java-файл с именем MessageEN.java в пакете com.labex.
  2. Внутри файла определите класс MessageEN с помощью следующего кода:
package com.labex;

// Implementation of the IMessage interface for English messages
public class MessageEN implements IMessage {
    private String msg; // Переменная для хранения сообщения

    // Getter method for retrieving the message
    public String getMsg() {
        return msg;
    }

    // Setter method for setting the message
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // Implementation of the doMessage method from the IMessage interface
    @Override
    public void doMessage() {
        // Print a greeting message in English
        System.out.println("Hello, " + msg);
    }
}

Класс MessageEN реализует интерфейс IMessage и предоставляет реализацию для метода doMessage(), который выводит приветственное сообщение на английском языке.

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

Создайте файл конфигурации applicationContext.xml

В этом шаге вы создадите файл конфигурации applicationContext.xml, чтобы настроить JavaBeans, созданные выше, и передать информацию об атрибуте msg в конфигурации.

  1. Создайте новый файл с именем applicationContext.xml в директории src/main/resources.
  2. Внутри файла добавьте следующую 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Конфигурация для бита сообщения на китайском языке -->
    <bean id="messageCN" class="com.labex.MessageCN">
        <!-- Установите свойство 'msg' бита MessageCN в "Labex" -->
        <property name="msg" value="Labex"/>
    </bean>

    <!-- Конфигурация для бита сообщения на английском языке -->
    <bean id="messageEN" class="com.labex.MessageEN">
        <!-- Установите свойство 'msg' бита MessageEN в "Labex" -->
        <property name="msg" value="Labex"/>
    </bean>

</beans>

Данный файл конфигурации настраивает биты MessageCN и MessageEN и инициализирует их свойства msg значением "Labex".

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

Создайте класс TestGreeting

В этом шаге вы создадите класс TestGreeting и добавите тестовый метод testGreeting(), чтобы выполнить тестовую операцию.

  1. Создайте новый Java-файл с именем TestGreeting.java в пакете com.labex.
  2. Внутри файла определите класс TestGreeting с помощью следующего кода:
package com.labex;

import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestGreeting {

    @Test
    public void testGreeting() {
        // Загрузите контекст Spring-приложения из XML-файла конфигурации
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // Получите биты сообщений из контекста
        IMessage messageCN = (IMessage) context.getBean("messageCN"); // Китайский бин сообщения
        IMessage messageEN = (IMessage) context.getBean("messageEN"); // Английский бин сообщения

        // Вызовите метод 'doMessage' на китайском бине сообщений
        messageCN.doMessage();

        // Вызовите метод 'doMessage' на английском бине сообщений
        messageEN.doMessage();

        context.close();
    }
}

Класс TestGreeting загружает контекст Spring-приложения из файла applicationContext.xml, получает биты MessageCN и MessageEN, а затем вызывает их методы doMessage(), чтобы протестировать функциональность.

Теперь вы завершили все шаги по созданию проекта по переключению китайско-английской информации с использованием IoC. Теперь вы можете запустить тест и увидеть ожидаемый вывод.

  1. Запустите тест:
cd ~/project/SpringGreeting/
mvn test

Тест должен пройти, и вы должны увидеть следующий вывод:

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.056 s - in com.labex.TestGreeting
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.295 s
[INFO] Finished at: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------
✨ Проверить решение и практиковаться

Резюме

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