通过 IoC 实现中英信息切换

JavaBeginner
立即练习

介绍

在这个项目中,你将学习如何使用控制反转(IoC)设计模式和 Spring 框架实现一个简单的中英消息切换系统。

👀 预览

[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] 正在运行 com.labex.TestGreeting
你好, Labex
Hello, Labex
[INFO] 测试运行: 1, 失败: 0, 错误: 0, 跳过: 0, 耗时: 1.056 秒 - 在 com.labex.TestGreeting 中
[INFO]
[INFO] 结果:
[INFO]
[INFO] 测试运行: 1, 失败: 0, 错误: 0, 跳过: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] 构建成功
[INFO] ------------------------------------------------------------------------
[INFO] 总耗时: 11.295 秒
[INFO] 完成时间: 2024-05-10T12:05:55Z
[INFO] ------------------------------------------------------------------------

🎯 任务

在这个项目中,你将学习:

  • 如何创建一个带有抽象 doMessage() 方法的 IMessage 接口
  • 如何在两个具体类 MessageCNMessageEN 中实现 IMessage 接口
  • 如何使用 applicationContext.xml 文件配置消息 bean
  • 如何在 TestGreeting 类中测试消息切换功能

🏆 成果

完成这个项目后,你将能够:

  • 使用 IoC 设计模式将消息功能的实现与主应用程序解耦
  • 使用 Spring 框架配置和管理消息 bean
  • 编写单元测试来验证消息切换系统的功能

创建 IMessage 接口

在这一步中,你将创建 IMessage 接口,它包含一个名为 doMessage() 的无返回值抽象方法。

  1. com.labex 包中创建一个名为 IMessage.java 的新 Java 文件。
  2. 在文件中,使用以下代码定义 IMessage 接口:
package com.labex;

// 消息功能的接口
public interface IMessage {
    // 显示消息的方法签名
    void doMessage();
}

这个接口为任何想要实现消息功能的类定义了基本结构。doMessage() 方法是一个抽象方法,将由具体的消息类来实现。

创建 MessageCN 类

在这一步中,你将创建 MessageCN 类,它实现了 IMessage 接口。这个类将有一个 msg 属性并提供 get/set 方法。它还将重写 doMessage() 方法以输出字符串“你好,Labex”。

  1. com.labex 包中创建一个名为 MessageCN.java 的新 Java 文件。
  2. 在文件中,使用以下代码定义 MessageCN 类:
package com.labex;

// 用于中文消息的 IMessage 接口实现
public class MessageCN implements IMessage {
    private String msg; // 存储消息的变量

    // 获取消息的 getter 方法
    public String getMsg() {
        return msg;
    }

    // 设置消息的 setter 方法
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // 实现 IMessage 接口中的 doMessage 方法
    @Override
    public void doMessage() {
        // 打印中文问候消息
        System.out.println("你好," + msg);
    }
}

MessageCN 类实现了 IMessage 接口,并为 doMessage() 方法提供了实现,该方法打印中文问候消息。

创建 MessageEN 类

在这一步中,你将创建 MessageEN 类,它同样实现了 IMessage 接口。这个类将拥有一个 msg 属性并提供 get/set 方法。它会重写 doMessage() 方法以输出字符串“hello,Labex”。

  1. com.labex 包中创建一个名为 MessageEN.java 的新 Java 文件。
  2. 在该文件内,使用以下代码定义 MessageEN 类:
package com.labex;

// 用于英文消息的 IMessage 接口实现
public class MessageEN implements IMessage {
    private String msg; // 用于存储消息的变量

    // 获取消息的 getter 方法
    public String getMsg() {
        return msg;
    }

    // 设置消息的 setter 方法
    public void setMsg(String msg) {
        this.msg = msg;
    }

    // 实现 IMessage 接口中的 doMessage 方法
    @Override
    public void doMessage() {
        // 打印英文问候消息
        System.out.println("Hello, " + msg);
    }
}

MessageEN 类实现了 IMessage 接口,并为 doMessage() 方法提供了实现,该方法打印英文问候消息。

创建 applicationContext.xml 配置文件

在这一步中,你将创建 applicationContext.xml 配置文件,用于配置上述创建的 JavaBeans,并在配置中传递 msg 属性信息。

  1. src/main/resources 目录中创建一个名为 applicationContext.xml 的新文件。
  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 的配置 -->
    <bean id="messageCN" class="com.labex.MessageCN">
        <!-- 将 MessageCN bean 的'msg' 属性设置为 "Labex" -->
        <property name="msg" value="Labex"/>
    </bean>

    <!-- 英文消息 bean 的配置 -->
    <bean id="messageEN" class="com.labex.MessageEN">
        <!-- 将 MessageEN bean 的'msg' 属性设置为 "Labex" -->
        <property name="msg" value="Labex"/>
    </bean>

</beans>

此配置文件设置了 MessageCNMessageEN 两个 bean,并使用值 "Labex" 初始化它们的 msg 属性。

创建 TestGreeting 类

在这一步中,你将创建 TestGreeting 类,并添加一个名为 testGreeting() 的测试方法来执行测试操作。

  1. com.labex 包中创建一个名为 TestGreeting.java 的新 Java 文件。
  2. 在文件中,使用以下代码定义 TestGreeting 类:
package com.labex;

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

public class TestGreeting {

    @Test
    public void testGreeting() {
        // 从 XML 配置文件加载 Spring 应用上下文
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 从上下文中获取消息 bean
        IMessage messageCN = (IMessage) context.getBean("messageCN"); // 中文消息 bean
        IMessage messageEN = (IMessage) context.getBean("messageEN"); // 英文消息 bean

        // 对中文消息 bean 调用 'doMessage' 方法
        messageCN.doMessage();

        // 对英文消息 bean 调用 'doMessage' 方法
        messageEN.doMessage();

        context.close();
    }
}

TestGreeting 类从 applicationContext.xml 文件加载 Spring 应用上下文,获取 MessageCNMessageEN bean,然后调用它们的 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 中练习更多实验来提升你的技能。

✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习