通过IoC实现中英信息切换

JavaJavaBeginner
立即练习

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

简介

在这个项目中,你将学习如何使用控制反转(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
  • 编写单元测试来验证消息切换系统的功能

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/SystemandDataProcessingGroup(["`System and Data Processing`"]) 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. 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 中练习更多实验来提升你的技能。

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